✍️
炼码教程 - SQL 边学边练
  • License
  • 介绍 Introduction
    • 目录 Content
  • Level 1
    • Hello SQL
    • 简单的 SELECT 语句
    • 简单的 INSERT 语句
    • 简单的 UPDATE 语句
    • 简单的 DELETE 语句
  • Level 2
    • 简单的数据库和数据表操作
      • 创建数据库
      • 创建数据表
      • 删除数据表
      • 删除数据库
    • 约束
      • 主键约束
      • 自增长约束
    • 常见数据类型
  • Level 3
    • SELECT进阶
      • WHERE 条件子句
      • ORDER BY 与 LIMIT
      • SELECT DISTINCT
    • Function 函数
      • AVG()
      • COUNT()
      • MAX()
      • MIN()
      • SUM()
      • ROUND()
      • NULL()
  • Level 4
    • Level 4 时间
  • Level 5
    • Level 5 多表单联合
    • 外键
    • 别名
    • 多表联结
      • INNER JOIN
      • LEFT JOIN
      • RIGHT JOIN
      • OUTER JOIN
  • Level 6
    • Level 6 临时表单
    • GROUP BY
    • HAVING
    • 子查询
      • SELECT 语句中的子查询
      • INSERT 语句中的子查询
      • UPDATE 语句中的子查询
      • DELETE 语句中的子查询
      • 多行子查询
      • 多列子查询
      • HAVING 子句中的子查询
      • 内联视图子查询
  • Level 7
    • Level 7 索引
  • Level 8
    • Level 8 事务 Transaction
  • Level 9
    • Level 9 复杂的SQL查询
  • Level MAX
    • Level 10 变量和循环
  • 附录 Appendix
    • 数据类型参考手册
    • 函数 Function
    • 通配符
    • 演示数据库
    • common
    • Bug 001
Powered by GitBook
On this page
  • 1. 索引的原理
  • 1.1 什么是索引
  • 1.2 索引的作用
  • 1.3 索引的副作用
  • 1.4 索引的分类
  • 2. CREATE INDEX
  • 2.1 CREATE INDEX语法
  • 2.2 CREATE INDEX 实例
  • 3. EXPLAIN
  • 3.1 EXPLAIN实例

Was this helpful?

  1. Level 7

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

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

执行输出结果(添加)

Previous内联视图子查询NextLevel 8 事务 Transaction

Last updated 4 years ago

Was this helpful?

参考

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