SQL索引

是mysql用来提高查询效率的数据结构

mysql5.5之后innoDB引擎,支持BTree(默认),Hash两种方式

mysql在使用like查询的时候只有使用后面的%时,才会使用到索引。

CREATE INDEX命令:

CREATE INDEX index_name ON table_name;

单列索引

单列索引基于单一的字段创建

CREATE INDEX index_name ON table_name (column_name);

唯一索引

唯一索引不止用于提升查询性能,还用于保证数据完整性。唯一索引不允许向表中插入任何重复值。

CREATE UNIQUE INDEX index_name on table_name (column_name);

组合索引

聚簇索引在表中两个或更多的列的基础上建立。(最左匹配原则)

CREATE INDEX index_name on table_name (column1, column2);

创建单列索引还是聚簇索引,要看每次查询中,哪些列在作为过滤条件的 WHERE 子句中最常出现。

如果只需要一列,那么就应当创建单列索引。如果作为过滤条件的 WHERE 子句用到了两个或者更多的列,那么聚簇索引就是最好的选择。

隐式索引

隐式索引由数据库服务器在创建某些对象的时候自动生成。例如,对于主键约束和唯一约束,数据库服务器就会自动创建索引。

DROP INDEX 命令

索引可以用 SQL DROP 命令删除。删除索引时应当特别小心,数据库的性能可能会因此而降低或者提高。

DROP INDEX table_name.index_name;

索引的数据结构

索引采用B+Tree,更稳定,每次需要执行三次操作,而且数据区的值是相指,有利与排序输出

image-20220808180515731

image-20220808180429856

联合索引

范围之后全失效

把选择性较好的列,放在where的最左边

image-20220808175340277

覆盖索引

​ 通过索引项的信息可以直接返回所查询的列,则该索引称之为查询SQL的覆盖索引。

​ 尽量使用覆盖索引,因为他能加快我们的查询速度,不需要回表操作。

image-20220808174931938

三星索引

  • where后面的匹配环境的索引关键字列越多越好,扫描的数据约精准,越少越好。
  • 避免再次排序
  • 尽可能的应用覆盖索引。减少回表操作。
文章作者: 郭远
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 郭远的博客空间
SQL SQL
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝