Level 7 索引

  • 索引的原理

  • CREATE INDEX

  • EXPLAIN

1. 索引的原理

1.1 什么是索引

索引(Index)是寻找资源中特定项目的一种机制,是帮助SQL高校获取数据的数据结构。

通俗来理解就是每个科技出版物结尾都有一个索引供读者定位其中特定单词或短语,索引按照字母顺序列出这些单词或者短语,方便读者能快速定位到索引里的特定字母,找到所需条目,然后找到指定页或者单词或短语可能存在的那些页。

1.2 索引的作用

  • 提高查询效率

  • 消除数据分组、排序

  • 避免“回表”查询(索引覆盖)

  • 优化聚合查询

  • 用于多表JOIN关联查询

  • 利用唯一性约束,保证数据唯一性

1.3 索引的副作用

  • 增加I/O成本

  • 增加磁盘空间

  • 不合适的索引或索引过多,会降低增删改的效率

1.4 索引的分类

1.4.1 按存储结构

  • BTree索引

  • Hash索引

1.4.2 按数据的存储方式

  • 聚集索引:聚簇索引的顺序就是数据的物理存储顺序,索引与数据存放在同一个文件中。

  • 非聚集索引:非聚簇索引的顺序与数据的物理存储顺序不同,索引与数据存放在不同的文件。

1.4.3 按应用层次

  • 单列:主键索引、唯一索引、普通索引

  • 多列:复合索引

2. CREATE INDEX

CREATE INDEX 语句用于在表中创建索引。

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

2.1 CREATE INDEX语法

SQL CREATE INDEX 语法

在表上创建一个简单的索引。允许使用重复的值:

CREATE INDEX index_name
ON table_name (column_name)

SQL CREATE UNIQUE INDEX 语法

在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

注释:用于创建索引的语法在不同的数据库中不一样。因此,检查您的数据库中创建索引的语法。

2.2 CREATE INDEX 实例

下面的 SQL 语句在 "Persons" 表的 "LastName" 列上创建一个名为 "PIndex" 的索引:

CREATE INDEX PIndex
ON Persons (LastName)

如果您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:

CREATE INDEX PIndex
ON Persons (LastName, FirstName)

3. EXPLAIN

参考 http://www.cainiaoxueyuan.com/sjk/6539.html

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句

语法

EXPLAIN tbl_name

EXPLAIN SELECT select_options

EXPLAIN tbl_name是DESCRIBE tbl_name或SHOW COLUMNS FROM tbl_name的一个同义词

如果在SELECT语句前放上关键词EXPLAIN,SQL将解释它如何处理SELECT,提供有关表如何联接和联接的次序

3.1 EXPLAIN实例

EXPLAIN SELECT * FROM USER WHERE id=1

执行输出结果(添加)

Last updated

Was this helpful?