mysqlorderby不走索引,mysql order by 不走索引
http://www.itjxue.com 2023-01-09 15:04 来源:未知 点击次数:
order by不走索引的原因,为什么
因为查询的是p.*,在有非空约束的情况下,两个索引只能选一个走,走完还要Table Access By RowID,之后再进行Sort,Cost比 full table scan + sort高~
MySQL何时使用索引与不使用索引
所有原则都建立在最左匹配原则上,如果多个字段同时匹配,则最左匹配
1、假如表的主键在id1上(有先后顺序),
如果使用id1查询则使用索引,如果使用id2则不使用索引
2、order by 不使用索引
3、group by 使用索引时,字段在第一个字段时 ,使用索引,字段在第二个字段时,不使用索引
4、in查询操作,查询字段在第一个字段时 ,使用索引,查询字段在第二个字段时,不使用索引(not in在表中的查询数量大于30%的时候是全表扫描的,用不到索引。所以没有可以优化的。)
5、like 查询操作,如果第一个字符不是正则符号,则查询字段在第一个字段时 ,使用索引,查询字段在第二个字段时,不使用索引
如果第一个字符是正则符号,则都不使用索引
6、如果没有搜索条件、没有排序条件、没有group by条件时,就不使用索引
7、union 查询操作,哪个字段是第一个索引字段,就在那个查询子句上使用索引
为什么mysql表里order by id desc用不到索引
SELECT *
FROM `XXX` AS `x`
INNER JOIN(
SELECT `id`
FROM `XXX`
ORDER BY `id` DESC
LIMIT M,N
) AS `t`
USING(`id`)
子查询用到了覆盖索引,所以不需要扫描磁盘就找到了所需要的行的id,然后可以直接去磁盘取需要的数据了。