索引
其实数据库中的数据是按页存放的
其实索引也是按页存放的
所以本质上索引也占硬盘空间 (以最小的消耗, 换取最大的利益)
索引是一种有效组合数据的方式! 为快速查找到指定记录做铺垫
目的就是快速或者某个记录! 提高了数据库的检索速度!
作用:
大大提高数据库的检索速度
改善数据库性能
MySQL 索引存储类型分类
01.B - 树索引: InnoDB,MyISAM 均支持
02. 哈希索引
其实索引是把双刃剑 (利弊共存), 如果使用不当, 反而会降低索引性能
主键: 加快检索数据 / 唯一标识
常用索引类型:
01. 普通索引: 允许在定义为索引的列中 出现 重复值和空值!
02. 唯一索引: 索引列不允许出现重复值, 但是可以出现一个空值!
03. 主键索引: 创建主键的时候, 系统会默认创建一个主键索引! 唯一! 不能为空!
04. 复合索引: 将我们的多个列组合起来!(name,sid) 姓名和身份证号!
05. 全文索引: 允许值的全文查询! 允许空值和重复值! 适合在一个内容比较多的列! text!
06. 空间索引: 对空间数据类型的列建立的索引
按照下列标准选择建立索引的列
频繁搜索的列
经常用作查询选择的列
经常排序分组的列
, 经常用作连接的列 (主键 / 外键)
请不要使用下面的列创建索引
仅包含几个不同值的列
表中仅包含几行
Eg:
-- 查询指定表的索引
SHOW INDEX FROM student;
TABLE: 索引所在的表
Non_unique: 索引是否唯一 0: 唯一 1: 不唯一
key_name: 索引名称
seq_in_index: 该列在索引中的位置
column_name: 定义所用的列名称
null: 该列是否为空
index_type: 索引类型
-- 给姓名增加 普通索引
- CREATE INDEX index_studentName
- ON student(studentName);
-- 给学生姓名和身份证号 增加 组合索引
- CREATE INDEX index_name_sid
- ON student(studentName,identityCard)
-- 删除索引
- DROP INDEX index_name_sid ON student;
- DROP INDEX index_studentName ON student;
-- 创建索引的原则
01. 经常被查询的列
02. 经常用作选择的列
03. 经常排序, 分组的列
04. 经常用作连接的列 (主键 / 外键)
使用索引时的注意事项:
01. 查询时减少使用 * 返回全部的列, 不要返回不需要的列!
02. 索引尽量要少, 在字节数小的列上建立索引!
03.where 字句中有多个条件表达式的时候, 包含索引的列要放在其他表达式之前!
04. 在 order by 的字句中避免使用表达式!
来源: http://www.linuxidc.com/Linux/2018-02/151074.htm