1. 索引是什么?
1.1定义:
! 索引(index)是帮助mysql高效获取数据的数据结构;
! 你可以理解为排好序的快速查找的数据结构 ;
在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向 数据,这样就可以在这些数据结构上实现高级的查找算法。这种数据结构就是索引。(一般为B+树结构组成的)
1.2本质:
索引是数据结构
1.3 为什么建索引?
1.3.1 目的:
提高查询效率,可以类比于字典
2.索引的优缺点:
2.1 优点:
建立索引,提高数据检索的效率,降低数据库的IO成本;
索引对数据列进行了排序,降低数据排序的成本,降低了CPU的消耗;
2.2 缺点:
索引列 也是占内存空间的;
虽然索引提高了查询速度,但是会降低 更新表的速度,如 insert update delete;
在不断调整建立索引过程中会浪费大量时间;
3. 索引分类:
3.1 单值索引:
一个索引包含单列,一个表可以包含多个单列索引。
3.2 唯一索引:
索引列的值必须唯一,允许空值。
3.3 复合索引:
一个索引包含多列。
4 基本语法:
4.1创建索引:
create [unique] index indexname on tablename(colunmnname(length));
alter tablename add [unique] index [indexname] on (columnname(length));
4.2 删除索引:
drop index [indexname] on tablename;
4.3 查看索引:
show index [indexname] on tablename;
4.5 alter 其他 用法:
alter table table_name add primary key(column_list);#建立主键
alter table tablename add unique indexname (columnname_list); # 建立唯一索引
alter table tablename add index [indexname] on (columnname_list);#建立普通索引
alter table tablename add full text indexname (columnname_list);#建立全文索引
5 MySQL索引结构:
5.1BTree 索引:
·浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据(深蓝色所示)和指针(黄色所示);
·磁盘块1包含数据项17和35,包含指针P1、P2、P3。
·P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。
·!真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99。
·!非叶子节点不存储真实的数据,只存储指引搜索方向的数据项,如17、35并不真实存在于数据表中。
5.2 其他索引:
Hash 索引
full-text 索引
R-Tree 索引
6 建立索引的时机:
6.1 那些情况该建立索引:
·1.主键自动建立唯一索引
·2.频繁作为查询条件的字段
·3.查询中与其他表关联的字段,外键关系建立索引
·4.查询中排序的字段,索引访问会大大提高排序速度
6.2 哪些情况不该建立:
·1.频繁更新的字段
·2.where 条件里用不到的
·3.表记录太少(百万,万级别以下)
·4.数据列重复的且分布均匀的字段
7.后面有关索引优化案例:
单表索引优化:单表索引优化 两表索引优化:两表案例 三表索引优化:三表案例