关于 mysql 加了 limit 反而变慢的问题?
SELECT * FROM pre_forum_post WHERE tid=6584344 AND `inv`='0' AND `uid`='6547981' ORDER BY dateline DESC limit 4
;
上面一条正常执行需要 16-20 秒.
SELECT * FROM pre_forum_postWHERE tid=6584344 AND `inv`='0' AND `uid`='6547981' ORDER BY dateline DESC ;
下面的只需要 0.2 秒左右。请大神帮帮忙.
走的索引不一样, 第一个 key 是 dateline, 第二个是 authorid, 根据业务建议优化一下索引.
WHERE + ORDER BY的索引优化,形如:
SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort];
建立一个联合索引(columnX,sort)来实现order by 优化。
回复
@ffvsnn520 : Extra信息不完整, 看看有没有 filesort.
mysql对语句优化的时候, 选择了不同的索引, 因为你没有 联合索引,所以 当 where 后面走了索引的时候(比如你说的主键), order by 则不会走索引, 如果你的结果集很大, filesort 也会很漫长...
如果mysql走了 order by 索引,那么where就不会走索引,如果你的sql在查询上需要花大量时间,而结果集filesort排序很快的话,那么没走where索引的查询就会非常慢...
所以建议就是 尽量让 where 和 order by 都走索引...