MySQL索引
产生索引原因
数据库经常使用查询语句,但select是将数据全部遍历一遍,故产生了索引(快速高效的查询到数据)
经历
1.二叉树
一种特殊的树型,最多只能有两个子树。
缺点:若产生如下图右3子树过多,一样胡要查询许多次。
故产生了红黑树:
通过左旋或右旋产生下面图:
优点:分支平衡
缺点:左旋或右旋的成本很大
故产生了B树/B-树
优点:每一个节点可以存放多个数据和多个子节点。
缺点:每个子节点的占用空间大,i/o消耗多。
B+树:
优点:子节点只放指针,不放数据。
聚集索引和非聚集索引
- 聚集索引:B+树叶子节点存放的是数据(自于INNODB引擎)
- 非聚集索引:B+树叶子节点存放的是地址
每一个表只能有且仅有一个聚集索引,可以有多个非聚集索引。
索引的分类
1:普通索引
mysql> create table tb_index(
-> tid int primary key,
-> tname varchar(10),
-> age int ,
-> index ind(age));
2:唯一索引
mysql> create table un_ind(
-> uid int primary key,
-> uname varchar(10),
-> age int ,
-> unique un_i(age));
3:全文索引
全文索引只能在myisam 引擎下创建。所以创建表的时候定好引擎。
mysql> create table fu_ind(
-> fid int primary key,
-> fname varchar(10)
-> )engine = myisam;
mysql> alter table fu_ind add fulltext index fu_i(fname);
4:联合索引
mysql> create table t_3(
-> tid int primary key,
-> tname varchar(10),
-> age int,
-> index i_1(tname,age)
-> );