莫一哲

现在很少听李志的歌了,有人说,是现在的生活没那么苦了,可是,也许我们早已经习惯生活的苦了,致敬,逼哥的歌 2018-03-08 13:49 by fifsky

mysql大数据量order by导致速度变慢

最近处理一个3700W的数据,其中一个字段使用的全文检索,索引比较大达到5G,测试的时候还挺快的,放到服务器之后变慢了,一开始以为是索引出问题(因为服务器的索引文件MDI是直接从本地拷贝到服务器的),后来发现本地也变慢了,对sql分析之后发现问题,一开始我测试的时候SQL是不加order by的如


SELECT * FROM yuliao WHERE MATCH(split_content) 
AGAINST ('我们' IN BOOLEAN MODE) limit 100


速度很快基本是毫秒级别,后来画蛇添足加了order by之后


SELECT * FROM yuliao WHERE MATCH(split_content) 
AGAINST ('我们' IN BOOLEAN MODE) order by id asc limit 100


这下居然需要21秒了,explain一下发现Using where; Using filesort,走的是fulltext的全文检索,并对内容重新排序,错就错在为毛要对结果集重新排序呢?,为毛不走id主键索引?这个需求为毛尚且可以去除order by id asc,因为默认就是走主键索引的,但是如果需求是需要order by id desc呢,测试表明同样很慢,目前只想到强制走id索引的方法解决,如下


SELECT * FROM yuliao force index(primary) WHERE MATCH(split_content) 
AGAINST ('我们' IN BOOLEAN MODE) order by id desc limit 100


如果你有更好的方案,欢迎留言讨论


  • 1
返回顶部