SQL索引优化

SQL 索引简介

索引 是一种数据结构,它帮助数据库管理系统(DBMS)快速查找和检索数据,就像书籍中的目录一样,可以加速查找特定的信息。通过索引,查询操作可以大大提高效率,尤其是在数据量庞大的情况下。

1. 常见的索引类型

  • 单列索引(Single-column Index):只有一个列作为索引。
  • 复合索引(Composite Index):由多个列组成的索引。复合索引的顺序非常重要,查询时需要考虑列的顺序。

2. 创建索引

sql 复制代码
创建单列索引:
CREATE INDEX idx_column_name ON table_name (column_name);
sql 复制代码
创建复合索引:
CREATE INDEX idx_column1_column2 ON table_name (column1, column2);
sql 复制代码
创建唯一索引:
CREATE UNIQUE INDEX idx_column_name ON table_name (column_name);
sql 复制代码
创建全文索引:
CREATE FULLTEXT INDEX idx_column_name ON table_name (column_name);

3. 删除索引

sql 复制代码
普通索引 删除:DROP INDEX index_name ON table_name;
主键索引 删除:ALTER TABLE table_name DROP PRIMARY KEY;

4. 查询某表的索引

sql 复制代码
可以使用 SHOW INDEX 命令来查看某个表的索引。
SHOW INDEX FROM table_name;

5.查看sql使用了哪个索引是否使用了索引

sql 复制代码
EXPLAIN 你的SQL语句
EXPLAIN SELECT * FROM your_table WHERE column = 'xxx';
查询到的结果

执行后会得到一张表,其中关键字段是:

字段 含义
key 使用的索引名(最重要)
key_len 索引使用长度
rows 预计扫描的行数
type 访问类型(越优越好:const > ref > range > index > ALL)
判断是否走索引看 key 字段
  • key 有值 → 使用了某个索引
  • keyNULL没有使用索引(走全表扫描)

例子

EXPLAIN SELECT * FROM users WHERE name = 'Tom';

id select_type table type key rows
1 SIMPLE users ref idx_name 10
  • key = idx_name → 使用了 idx_name 索引
  • type = ref → 索引利用得不错
  • rows = 10 → 扫描很少的行,说明索引命中效果好

没走索引的例子
id select_type table type key rows
1 SIMPLE users ALL NULL 100000
  • key = NULL → 完全没用索引
  • type = ALL → 全表扫描(最差)

6.索引的优缺点

  • 优点

    • 加速查询:特别是在进行大量数据检索时,索引能够显著提高查询速度。

    • 提高排序和分组效率 :索引有助于加速 ORDER BYGROUP BY 等操作。

    • 优化连接查询:在执行多表连接查询时,索引可以提高效率。

  • 缺点

    • 占用空间:每个索引都需要存储在磁盘上,会占用额外的存储空间。

    • 性能开销:插入、删除、更新操作时,索引需要进行相应的更新,这会增加操作的开销。

    • 维护成本:随着数据的增加,索引的维护也会变得更加复杂和耗时。

总结

索引是数据库中非常重要的性能优化工具,可以极大提高查询效率,但在创建和管理索引时需要谨慎。合理的索引设计可以帮助数据库在大数据量时保持良好的性能,而过多的索引或不合理的索引则会影响写入操作并占用大量存储空间。

相关推荐
龙仔7253 小时前
人大金仓OS_Core数据库自动备份实施笔记(银河麒麟Linux)
linux·数据库·笔记·备份·人大金仓
sunxr.2274 小时前
Mysql-----最后一次作业
数据库·mysql
普通网友4 小时前
Python FastAPI 异步数据库管理
数据库·fastapi
晓子文集4 小时前
Tushare接口文档:期货合约信息表(fut_basic)
大数据·数据库·金融·金融数据·量化投资
三言老师5 小时前
CentOS7.9:Redis‑Cluster集群部署结构化实战教程
linux·运维·服务器·数据库
旺仔学长 哈哈5 小时前
Spring Boot 智能停车场管理系统---附源码+数据库文档
数据库·spring boot·后端·智能停车场
ClickHouseDB5 小时前
ClickHouse托管Postgres:OLTP+OLAP,新能力解锁最佳数据平台
java·前端·数据库
数智化管理手记6 小时前
主数据重复、错漏频发?一站式主数据管理平台如何落地?
大数据·运维·数据库·人工智能·数据挖掘
吴声子夜歌6 小时前
MongoDB 4.2——选择片键
数据库·mongodb
吴声子夜歌6 小时前
MongoDB 4.2——安全介绍
数据库·安全·mongodb