6.3索引优化策略
索引列上不能使用表达式或函数
错误示例
to_days()为函数;out_date为索引列
纠正结果
Mysql的Btree索引对键值大小有限制,大小根据存储引擎的不同有所不同。对于InnoDB存储引擎,Btree索引对键值大小不能超过767个字节;对于MyISAM存储引擎,Btree索引对键值大小不能超过1000个字节
前缀索引和索引列的选择性
CREATE INDEX index_name ON table(col_name(n));
索引的选择性是不重复的索引值和表的记录数的比值
联合索引
如何选择索引列的顺序
经常会使用到的列优先
选择性高的列优先
宽带小的列优先
覆盖索引
优点
可以优化缓存,减小磁盘的IO操作
可以减少随机IO,将随机IO操作变为顺序IO操作
可以避免对Innodb主键索引的二次查询
可以避免MyISAM表进行系统调用
无法使用覆盖索引的情况
存储引擎不支持覆盖索引
查询中使用了太多的列
使用了双%号的like查询
尝试执行以下命令,观察查询语句所使用的方式:
use sakila
desc film
explain select language_id from film where language_id=1\G
explain select * from film where language_id=1\G
show create table actor\G
explain select actor_id,last_name from actor where last_name='Joe'\G
使用索引来优化查询
使用索引
Last updated
Was this helpful?