目录
索引index:
作用:
索引的创建:
存储引擎
主要分类:
索引的数据结构
mysql索引系统:
索引分类:
主键索引
唯一索引
普通索引
全文索引-- MyISAM 支持,InnoDB 在5.6之后执行
组合索引
重点名词:
回表
覆盖索引
最左前缀
索引下推
索引维护
索引是为了加快对数据的搜索速度而设立的。 索引的是方案中的一个数据库对象,与表独立存放。
在数据库中用来加速对表的查询,通过使用快速路径访问fang方法快速定位数据,减少磁盘的I/O;
sql的索引是非显示索引。也就是索引创建之后,在用户撤销它之前不会在用到该索引的名字,但是索引在用户查询的时候会起作用。
1 自动:当在表上定义一个primary key或者unique 约束条件的时候,Oracle数据库自动创建一个对应的唯一索引。
2 手动: 用户可以创建一个索引用来查询加速。
创建索引:
create index index_name on table(column[,column]....);
删除索引:
drop index index_name;
索引存储在文件系统中,索引的存储文件形式和存储引擎有关。
innoDB:存储在磁盘
聚簇索引,数据和文件存储在一起 。
.frm 存放的是表结构
.ibd:存放的是数据文件和数据文件
注意: mysql的innodb存储引擎默认情况下会把所有的数据都存放在表空间中,不会为每一个单独的表保存一个数据文件,如 果需要将每一个表单独使用文件使用文件保存,设置如下属性:
set global innodb_file_per_table=on;
MyISAM:存储在磁盘
非聚簇索引, 数据和索引单独一个文件,
.frm 存放表结构
.MYI 存放索引数据
.MYD 存放实际数据
memory:存储在内存。
hash 二叉树 avl平衡树 红黑树 B树 B+树
主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。
索引列的所有值都只出现一次,且必须唯一,值可以为空。
基本的索引类型,值可以为空,没有唯一性的限制。(覆盖索引)
全文索引的索引类型是FULLTEXT。全文索引可以在varchar,char,text类型的列上创建。
多列值组成一个suoy索引,专门用于组合索引(最左匹配)
如果创建索引的键值是其他的字段,那么在叶子节点中存储的是该记录的主键,然后再通过主键索引找到对应的记录,叫做回表。innoDB才有回表,MyISAM是没有的。
就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖
https://www.cnblogs.com/happyflyingpig/p/7662881.html
mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先,如:
可以在索引遍历过程中,对索引中包含的字段先做判断,过滤掉不符合条件的记录,减少回表字数。
https://www.cnblogs.com/kkbill/p/11354685.html