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,然后可以直接去磁盘取需要的数据了。

(责任编辑:IT教学网)

更多

相关Fireworks教程文章

推荐Fireworks教程文章