-
in 使用不当
-
使用不当
-
查询优化不走索引
-
总结
-
约束以及分类
-
MySQL中InnoDB表的聚簇索引
索引
一种能帮助mysql提高查询效率的数据结构:索引数据结构
“索引(在MySQL中也叫“键key”)是存储引擎快速找到记录的一种数据结构。”
——《高性能MySQL》
索引的理解
-
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
-
索引是对数据库表中的一列或多列的值进行排序的一种
数据结构
。 -
索引的作用就类似于书本的目录,新华字典的拼音,偏旁部首的首查字,可以快速的检索到需要的内容,所以当数据达到几百万的时候,那么索引就很有必要了。其功能是帮助我们快速匹配查找到需要的数据行,是数据库
性能优化
最常用的工具之一
索引优缺点
优点
-
1.大大加快数据的检索速度;
-
2.创建唯一性索引,保证数据库表中每一行数据的唯一性;
-
3.加速表和表之间的连接;
-
4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
缺点
-
1.索引需要占用数据表以外的
物理存储空间
-
2.创建索引和维护索引要花费一定的时间,维护索引需要耗费数据库资源,并且要占用磁盘空间
-
3.当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。
结论:数据库表并不是索引加的越多越好,而是仅为那些常用的搜索字段建立索引效果才是最佳的!
索引的分类
- 主键索引:PRIMARY KEY
设定为逐渐后,数据库自动建立索引,innodb为聚簇索引
,主键索引列值不能有空(Null)
- 单值索引:又叫单列索引、普通索引
一个索引只包含单个列,一个表可以有多个单列索引
- 唯一索引:
索引列的值必须唯一,但允许有空值(Null),但只允许有一个空值(Null)
- 复合索引:又叫组合索引
一个索引可以包含多个列,多个列共同构成一个复合索引!
- 全文索引:Full Text (MySQL5.7之前,只有MYISAM存储引擎支持全文索引)
全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引可以在Char 、Varchar 上创建。
索引的基本操作
SHOW INDEX FROM table_name;#查看索引详情:
- 主键索引 PRIMARY KEY
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引,直接在字段后面加PRIMARY KEY
。注意:一个表只能有一个主键。
- 唯一索引 UNIQUE
唯一索引列的值必须唯一,但允许有空值。
ALTER TABLE 表名 ADD UNIQUE 索引名 ON (列名) #修改表结构添加
CREATE UNIQUE INDEX 索引名 ON 表名(列名) #直接创建
如果是唯一组合索引,则列值的组合必须唯一。
ALTER TABLE 表名 ADD UNIQUE 索引名 (列名1,列名2) #修改表结构添加
CREATE UNIQUE INDEX 索引名 ON 表名(列名1,列名2) #直接创建
- 普通索引 INDEX:这是最基本的索引,命令如下
ALTER TABLE 表名 ADD INDEX ON (列名) #修改表结构