1.什么是索引:一种排好序的可快速查找的数据结构
2.索引的优势和劣势:
优势:
(1)降低IO成本,提高访问速率
(2)降低CPU消耗,降低数据排序的成本
劣势:
(1)索引本身也是一张表,过多的索引会导致占用的空间过大
(2)索引虽然提高了查询的效率,但同时也降低了修改的效率,因为在进行修改操作的时候,不仅需要更新数据,同时也需要更新索引
(3)索引只是提高效率的一种方式,如果你的Mysql有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询
3.索引的分类:
(1)单值索引:一个索引对应单个列,可以创建多个单值索引,不过一般用联合索引
(2)唯一索引:当前字段必须具有唯一性,值可以为null
(3)联合索引:一个索引对应多个字段,依据最左前缀原则进行匹配
4.基本语法
(1)创建:create [unique] index indexName on tableName(columnname(length));
alter tableName add [unique] index [indexName] on (columnname(length));
(2)删除:drop index [indexName] on tableName;
(3)查看:show index from tableName;
5.Mysql索引的结构:
(1)BTree索引
(2)Hash索引
(3)full-text全文索引
(4)R-Tree索引
6.哪些条件下适合建索引:
(1)主键自动建立唯一索引
(2)频繁作为查询条件的字段应该创建索引
(3)外键关系建立索引
(4)频繁需要更新的字段不适合建立索引
(5)where条件后
(6)高并发下选择联合索引
(7)排序后字段建立索引
(8)分组后字段建立索引
7.哪些条件下不需要建立索引
(1)表记录太少
(2)经常增删改的表
(3)数据重复且分布平均的字段
8.索引失效的原因:
(1)全值匹配
(2)最左前缀原则
(3)不在索引列上做任何操作(计算,函数,自动or手动类型转换),会导致索引失效而转向全表扫描
(4)存储引擎不能使用索引中范围条件右边的列
(5)尽量使用覆盖索引,减少select*
(6)mysql在使用不等于(!=或<>)的时候无法使用索引会导致全表扫描
(7)is null,is not null也无法使用索引
(8)like以通配符开头('%abc...')mysql索引失效会变成全表扫描的操作
(9)字符串不加单引号索引失效
(10)少用or,用它来连接时会索引失效