Chinaunix

标题: 大家来讨论这个问题吧 [打印本页]

作者: lostmemory    时间: 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 编辑 ]
作者: dz902    时间: 2006-09-25 18:13
加一个内存表储存计数。
作者: stone5    时间: 2006-09-26 10:47
算一下,350万条记录/24小时/3600秒=40.5条记录/秒
查询相对来讲是比较少的,主要是插入记录占用了资源,应该提高插入记录的效率。
插入到内存表中,或者使用更简单的数据结构,或者没必要保存全部的数据。
作者: lostmemory    时间: 2006-09-26 13:30
恩 这是个预期记录数
如果改成一个月这么多 有好的办法么

[ 本帖最后由 lostmemory 于 2006-9-26 14:11 编辑 ]
作者: achun.shx    时间: 2006-09-27 21:44
没有做过类似楼主的情况测试。
胡乱说说,未经证实
1.扣费类别不要用字符串,改成int
2.把id和扣费类别做一个合并索引,前后顺序问题,你试试那个快
有了结果要帖出来呀!
作者: geel    时间: 2006-09-27 22:38
按照扣费类别分表,作replication,从slave查询。
单独做一个表来记录每个类别的总共点击了多少次总共扣费多少,因为这个用到的查询最多。而每次点击只需更新一条记录即可(update 统计 set 点击=点击+1,费用=费用+xxx where 类别=xxx,select 点击,费用 fro m 统计 where 类别=xxx)

不知道可行不?
作者: 夜猫子    时间: 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 编辑 ]
作者: geel    时间: 2006-09-28 01:56
他的 id 可能是 用户id 或者其他什么id的意思
作者: solr.china    时间: 2006-09-28 08:13
数据库字段都可以定义成整形字段,比如tiny int,medium int, int。。。。比如扣费类别(1普通,2白金会员,3黄金会员)

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


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


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







欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2