索引的知识要点与操作
- 要点
- 对单个字段做索引,也可以对多个字段做索引(联合索引),联合索引只有最后一个字段支持"<" ">"操作。
- 虽然索引可以建很多个,但是每个一个索引都会增加存储和插入时候资源开销。
- SQL执行只会使用到一个索引。(这解释了为什么需要联合索引,而不只是对多个字段创建索引)
- 如果SELECT的结果也在索引上,执行效率最高,也称为覆盖索引。(但是对长串字符做索引可能得不偿失)
- 操作
ALTER TABLE `xxx`.`xxx` DROP INDEX `server_id`, ADD INDEX `idx_server_record` (`server_id`, `record_time`) USIN G BTREE;
-
EXPLAIN中type字段说明
const:表示通过索引一次就找到数据,用于比较primary key或者unique索引,很快就能找到对应的数据;
eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用于主键或唯一索引扫描;
ref:非唯一索引扫描,返回匹配的所有行,如建立一个朋友维护表,维护用户对应的朋友,而在用户ID建立非唯一索引;
range:使用一个索引检索指定范围的行,一般在where语句中会出现between、<、>、in等范围查询;
index:全索引扫描,只遍历索引树;
ALL:全表扫描,找到匹配行。与index比较,ALL需要扫描磁盘数据,index值需要遍历索引树。