Order by desc/asc limit M是我在mysql sql优化中经常遇到的一种场景,其优化原理也非常的简单,就是利用索引的有序性,优化器沿着索引的顺序扫描,在扫描到符合条件的M行数据后,停止扫描;看起来非常的简单,但是我经常看到很多性能较差的sql没有利用这个优化规律,下面将结合一些实际的案例来分析说明:
案例一:
一条sql执行非常的慢,执行时间为:
roottest 02:00:44
SELECT * FROM test_order_desc WHERE END_TIME
我的mysql server 版本为5.7 commutity 版本,低于该版本的trace 参数可能不存在(5.6.x 之后)!
mysql> EXPLAIN select * from employees where name > ‘a’;
+—-+————-+———–+————+——+———————–+——+———+——+——+———-+————-+
| id | select_type | table | partitions | type | possible_ke