1)索引就好比一本书的目录,它能让你更快的找到自己想要的内容。
2)让获取的数据更有目的性,从而提高数据库检索数据的性能。
1.索引的类型
1)BTREE:B+树索引 (Btree B+tree B*tree)
2)HASH:HASH索引 hash key
3)FULLTEXT:全文索引
4)RTREE:R树索引
Btree索引
比如 我要搜索一个数字 38 这时要走3次IO
然后在搜索一个>38 <70 的数字 这时要走9次IO
B+tree算法
比如 我要搜索一个数字 38 这时要走3次IO
然后在搜索一个>38 <70 的数字 这时要走6次IO 注意 他是不走指针的 里面的Q代表指针
好处:1。优化了范围查询
2.在叶子节点添加了相邻节点的指针
B*tree
比如 我要搜索一个数字 38 这时要走3次IO
然后在搜索一个>38 <70 的数字 这时要走2次IO 注意 他是不走指针的 里面的Q代表指针
而且他只在枝节点上找
好处:在枝节点添加了相邻 节点的指针
2.索引管理
1.索引必须添加在列上面
2.在where后面接上建立索引的列,会加快查询速度
3.pages
3.索引的分类
主键索引(primary key)
普通索引 ***(key)
唯一索引(unique key)
4.添加索引
1普通索引
#创建索引:alter tabler + 表名 add index idx_+索引名
mysql> alter table student2 add index idx_sage_sage(sage);
Query OK, 0 rows affected (0.14 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student2;
+----------+---------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+-------------------+----------------+
| sid | int(11) | NO | PRI | NULL | auto_increment |
| sname | varchar(10) | NO | MUL | NULL | |
| sage | tinyint(3) unsigned | YES | MUL | NULL | |
| sgender | enum('m','f') | NO | | m | |
| cometime | datetime | NO | | CURRENT_TIMESTAMP | |
+----------+---------------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)
mysql> show create table student2;
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student2 | CREATE TABLE `student2` (
`sid` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
`sname` varchar(10) NOT NULL COMMENT '学生姓名',
`sage` tinyint(3) unsigned DEFAULT NULL COMMENT '学生年龄',
`sgender` enum('m','f') NOT NULL DEFAULT 'm' COMMENT '学生性别',
`cometime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入学时间',
PRIMARY KEY (`sid`),
KEY `idx_snamex_sname` (`sname`),
KEY `idx_sage_sage` (`sage`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
2.主键索引
#alter table +表名 add primary key pri_+想加的主索引名字
mysql> alter table st add primary key pri_i