用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 分别做索引