日期:2014-05-16  浏览次数:20892 次

用where hits>100 order by id的时候第一次运行速度特别慢,60万数据,高压力
用select   id,a,b,c,d,e   from   table   where   hits> 100   and   menuid=1   order   by   id   desc   limit   200的时候第一次运行速度特别慢,这个表有60多万条数据

其中hits、menuid建立了索引,有什么办法让它速度快起来吗??

show   processlist   的时候,有很多Sending   data,都是中间有hits> 100   and   menuid=xx的


menuid是目录的ID值,只有1、2、3、4、5、6、7、8、9、10、13、17、19这几种记录

hits是记录点击数,但正常运行时并不update数据,只有压力少的时候update


------解决方案--------------------
建立 menuid、hits 聚集索引好了
------解决方案--------------------
注意顺序哦
假如你建立的是 hit、menuid聚集索引 和没有索引一样了
------解决方案--------------------
建立合理的索引确实能提高查询速度。

聚集索引,就是你表中数据的物理存放顺序。


综合各方面考虑,是否需要在这两列上创建聚集索引。
------解决方案--------------------
60万条数据就慢了?
我们这里很多表都100万+的数据量了。速度也是有些慢,不过还可以忍受。
首先服务器最好要有1G或以上的内存。

首先 id 是不是主键?如果不是,也建立索引。
limit 200 是指从第200条数据开始取,一直取完。

其次,以楼主的程序,建立 menuid、hits 聚集索引 会好一些,不过,没有最终解决问题。
------解决方案--------------------
不过,如果表结构和实际的SQL完全如上所示。
速度应该不会太慢。
如果很慢也是因为查出来的数据量特别大。
------解决方案--------------------
把你的索引结构贴出来,貌似没有建立合适的索引
------解决方案--------------------
由于它只有几种记录,似乎建立索引效果欠佳
----------------------------------------
如果值不多,建议你explain一下,看看MySQL的优化方式
------解决方案--------------------
8108 不会太慢呀。
不过,楼主给数据库的缓存太小了吧。
------解决方案--------------------
那根据menuid做分区表吧 hits, menuid 分别做索引