天天看点

Mysql order by 优化

以前一直以为在order by的字段上加上索引就行了,网上搜也是,实际上使用的时候在查询中如果使用了ORDER BY 语句,如果在select中有未加入索引的字段,使用order by以后就不会走索引,而会进行全表扫描。

单表的话可以在from字段后加入FORCE INDEX(key)字段,就能强制使用索引。

使用前

+----+-------------+-------+------+---------------+------+---------+------+------+----------------+

| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra          |

+----+-------------+-------+------+---------------+------+---------+------+------+----------------+

|  1 | SIMPLE      | t_sms | ALL  | NULL          | NULL | NULL    | NULL |  107 | Using filesort |

+----+-------------+-------+------+---------------+------+---------+------+------+----------------+

type时all,代表全表扫描

extra使用的是Using filesort。文件排序。这项效率非常低

使用后

+----+-------------+-------+-------+---------------+-----------------+---------+------+------+-------+

| id | select_type | table | type  | possible_keys | key             | key_len | ref  | rows | Extra |

+----+-------------+-------+-------+---------------+-----------------+---------+------+------+-------+

|  1 | SIMPLE      | t_sms | index | NULL          | sms_create_time | 9       | NULL |   10 |       |

+----+-------------+-------+-------+---------------+-----------------+---------+------+------+-------+

使用后type就是index了,说明走了索引,并且extra没有值,说明文件顺序和order by字段顺序一直,不需要额外的操作

继续阅读