mysql order by查询慢,索引也不行或不生效优化解决办法40万条数据测试如下
测试用了40万+条数据,MySQL数据表字段为48个,数据量还是蛮庞大的,面对这样的数据,如果没有做MySQL索引,简直可以直接关机了,因为根本无法访问。
但是,等好不容易做了索引,却发现MySQL执行仍然很慢,额,打个比喻,跟蜗牛差不多吧,总之让人蛋疼。
我用了一个晚上来研究,用了N多种办法,最后找到了可取的一种,那就是优化索引顺序,指定索引。
好吧,废话不多说了,直接上图、上代码、见证奇迹……
SELECT bookid,bookname,bookinfo,author,click,vip,bao,jian,piao,shang,ping,zan,cai,cang,size,isfull,sort,sortname,type,typename,sexid,tag,qudao,pic,newtime FROM ysslms_slms_book_list WHERE sort=9 AND type=1 AND vip=0 AND newtime >= UNIX_TIMESTAMP('2020-02-03 05:43:46') AND isfull=2 AND size <= 300000 order by size desc LIMIT 0,30000
//优化前使用的MySQL语句
效果如下:让人蛋疼,3万条数据,居然要用11秒,真让人受不了,当然,让人受不了的还在下面,继续看……》
有没有被这惊人的速度吓坏呢?我自己都被下了一条,哎,好吧,说正题,开始见证奇迹,继续优化……
SELECT bookid,bookname,bookinfo,author,click,vip,bao,jian,piao,shang,ping,zan,cai,cang,size,isfull,sort,sortname,type,typename,sexid,tag,qudao,pic,newtime FROM ysslms_slms_book_list FORCE INDEX(size) WHERE sort=9 AND type=1 AND vip=0 AND newtime >= UNIX_TIMESTAMP('2020-02-03 05:43:46') AND isfull=2 AND size <= 300000 order by size desc LIMIT 0,30
//优化后的代码,没什么特别的,就是加了 FORCE INDEX(size)
嘿嘿!是不是很羡慕?别急,慢慢来,这就带客官去找“《葵花宝典》”,哈哈,偏题了,精彩继续……
首先,我们需要自定义一个索引,按顺序来,就像我这样-》,不废话,上图就完了
是不是有所领悟?嗯,没错,就是这样,顺序按照我们要查询的MySQL顺序来,从左到右。
当然,我也试过没按顺序的,结果嘛!你懂的,蜗牛它兄弟。
至此,我们的测试优化已结束,谢谢大家观看
附对比图一张
文图来自https://www.slms.cc/原创,转发请备注,谢谢配合,祝您工作愉快!