关于数据库的索引
什么是索引
索引(Index)是帮助MySQL高效获取数据的数据结构。索引在数据量较小时用处不大;但当数据库数据量非常大(百万级以上)时,索引可以极大地提升数据的查询速度。InnoDB引擎索引底层实现默认的数据结构是BTree。
如何创建索引
方法一:在创建表时,使用SQL语句给某一字段创建某种类型的索引。(详见:索引的分类)
方法二:在表创建完成后,使用SQL语句给某一字段添加索引或修改某一字段的索引。
1 | CREATE 索引类型 INDEX `索引名称` ON `表名`(`字段名`); -- 给某个表的某个字段添加某种类型的索引 |
1 | ALTER TABLE `数据库名称`.`表名` ADD 索引类型 INDEX `索引名称` (`字段名`); -- 修改某个表的某个字段的索引 |
方法三:在创建表时或在表创建完成后,使用可视化工具给某一字段添加某种类型的索引。
索引的分类
- 主键索引(PRIMARY KEY)
创建命令格式:
1 | PRIMARY KEY(`字段名称`) |
注意:
- 主键是区分表中每行数据的唯一标识。
- 一个表只能有一列作为主键。
- 一个表中各行的主键值是唯一的。
- 唯一索引(UNIQUE KEY)
创建命令格式:
1 | UNIQUE KEY `索引名称`(`字段名称`) |
注意:
- 唯一索引的列不允许行值重复,允许为NULL。
- 一个表允许多个列(字段)创建唯一索引。
- 若将某一字段设置为唯一索引,则该索引的Non_unique属性为1,否则为0。
应用举例:一个人的身份证号码是唯一的。
- 常规索引(KEY/INDEX)
创建命令格式:
1 | KEY `索引名称`(`字段名称`) |
注意:
- 常规索引可以使用关键字KEY或INDEX标识。
- 常规索引没有什么限制,允许插入NULL和重复值。
- 全文索引(FULLTEXT)
创建命令格式:
1 | FULLTEXT `索引名称`(`字段名称`) |
注意:
- 最新版的InnoDB和MyISAM引擎都支持全文索引功能。
- 只能在CHAR、VARCHAR、TEXT类型的字段上加全文索引。
- 主要用来查找文本中的关键字,而不是直接与字段值进行比较。
全文索引需要配合函数match(字段名)和函数against(‘搜索文本’)进行全文搜索。命令格式:
1 | select 字段名1,[字段名2,……] from 表名 where match(字段名) against('搜索文本'); |
另外:
- 显示一个表的全部索引信息:
1 | SHOW INDEX FROM `表名`; -- 显示一个表的全部索引信息 |
- 分析SQL语句执行的状况:
1 | EXPLAIN SELECT 字段名1,[字段名2,……] FROM 表名; -- 分析非全文索引SQL语句执行的状况 |
创建索引的原则
- 索引不是越多越好。
- 不要对经常变动的数据加索引。
- 数据量较小的表不需要加索引。
- 索引一般加在常用来查询的字段上。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lotlyz's Blog!
评论