免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1475 | 回复: 8
打印 上一主题 下一主题

大家来讨论这个问题吧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-25 17:49 |只看该作者 |倒序浏览
数据库字段
id 来源 扣费类别 扣费数 时间

点击一次 扣费一次

打开页面以后首先要显示 每个类别的总共点击了多少次总共扣费多少
然后下面可以查询 某个id扣费多少

每个月的记录数 350万左右
现在情况是 运行起来很慢

请求优化办法

id 还有扣费类别已经加了索引
要执行的sql语句最慢的是
select id,count(扣费数) from 表 where 扣费类别='XXX' group by id

大家有什么好的 解决办法么
恳求大牛指导 小弟感激不尽

数据库在不断的插记录 用户随时有可能查询

[ 本帖最后由 lostmemory 于 2006-9-26 14:10 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-09-25 18:13 |只看该作者
加一个内存表储存计数。

论坛徽章:
0
3 [报告]
发表于 2006-09-26 10:47 |只看该作者
算一下,350万条记录/24小时/3600秒=40.5条记录/秒
查询相对来讲是比较少的,主要是插入记录占用了资源,应该提高插入记录的效率。
插入到内存表中,或者使用更简单的数据结构,或者没必要保存全部的数据。

论坛徽章:
0
4 [报告]
发表于 2006-09-26 13:30 |只看该作者
恩 这是个预期记录数
如果改成一个月这么多 有好的办法么

[ 本帖最后由 lostmemory 于 2006-9-26 14:11 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-09-27 21:44 |只看该作者
没有做过类似楼主的情况测试。
胡乱说说,未经证实
1.扣费类别不要用字符串,改成int
2.把id和扣费类别做一个合并索引,前后顺序问题,你试试那个快
有了结果要帖出来呀!

论坛徽章:
0
6 [报告]
发表于 2006-09-27 22:38 |只看该作者
按照扣费类别分表,作replication,从slave查询。
单独做一个表来记录每个类别的总共点击了多少次总共扣费多少,因为这个用到的查询最多。而每次点击只需更新一条记录即可(update 统计 set 点击=点击+1,费用=费用+xxx where 类别=xxx,select 点击,费用 fro m 统计 where 类别=xxx)

不知道可行不?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2006-09-28 01:39 |只看该作者
除了对扣费类别进行整数编码之外,楼主的sql写得有点怪,“group by id”完全是逻辑错误,这么group一下,不慢才怪
select 扣费类别, count(扣费数) from 表 group by 扣费类别    --一次查全部的扣费类别汇总
select count(扣费数) from 表 where 扣费类别 = 'xxx' --查一个扣费类别汇总

geel的方法复杂了,350W的表,不算太大,不用那么麻烦

[ 本帖最后由 夜猫子 于 2006-9-28 01:41 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2006-09-28 01:56 |只看该作者
他的 id 可能是 用户id 或者其他什么id的意思

论坛徽章:
0
9 [报告]
发表于 2006-09-28 08:13 |只看该作者
数据库字段都可以定义成整形字段,比如tiny int,medium int, int。。。。比如扣费类别(1普通,2白金会员,3黄金会员)

sql参考夜猫子的回帖。(扣费类别别忘记作索引)


如果这样做速度还慢,再参考dz902的回帖。


如果还不行,还有其他法子。(我觉得上面的可以了)。


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP