篇首语: 先来了解下MySQL关于索引的一些基础知识要点: a、EXPLAIN结果中的key_len只显示了条件检索子句需要的索引长度,但 ORDER BY、GROUP BY 子句用到的索引则不计入 key_len 统计值; b、联合索引(composite index):多个字段组成的索引,称为联合索引; 例如:ALTER TABLE t ADD INDEX `idx` (col1, col2, col3) c、覆盖索引(covering index):如果查询需要读取到索引中的一个或多个字段,则可以从索引树中直接取得结果集,称为覆盖索引; 例如:SELECT col1, col2 FROM t; d、最左原则(prefix index):如果查询条件检索时,只需要匹配联合索引中的最左顺序一个或多个字段,称为最左索引原则,或者叫最左前缀; 例如:SELECT * FROM t WHERE col1 = ? AND col2 = ?; e、在老版本(大概是5.5以前,具体版本号未确认核实)中,查询使用联合索引时,可以不区分条件中的字段顺序,在这以前是需要按照联合索引的创建顺序书写SQL条件子句的; 例如:SELECT * FROM t WHERE col3 = ? AND col1 = ? AND col2 = ?; f、MySQL截止目前还只支持多个字段都是正序索引,不支个别字段持倒序索引; 例如:ALTER TABLE t ADD INDEX `idx` (col1, col2, col3 DESC),这里的DESC只是个预留的关键字,目前还不能真正有作用 g、联合索引中,如果查询条件中最左边某个索引列使用范围查找,则只能使用前缀索引,无法使用到整个索引; 例如:SELECT * FROM t WHERE col1 = ? AND col2 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|