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 等操作。

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

  • 缺点

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

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

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

总结

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

相关推荐
新时代农民工~16 分钟前
PostgreSQL 主从故障恢复自动化:实战脚本与最佳实践
数据库·postgresql·自动化
woshilys1 小时前
sql server 查询外键
数据库·sql·sqlserver
瀚高PG实验室2 小时前
开发管理工具打不开No way to find ori gi nal streamhand er for jar protocol
java·数据库·jar·瀚高数据库
__zRainy__2 小时前
Redis系列:缓存抽象封装与最佳实践
数据库·redis·缓存
cen__y2 小时前
Linux13(数据库)
linux·服务器·c语言·开发语言·数据库
__zRainy__2 小时前
Redis系列:核心数据类型与基础 API 解读
数据库·redis·缓存
雨辰AI3 小时前
人大金仓慢 SQL 根治方法论:问题定位 - 分析 - 优化全流程
数据库·后端·sql·mysql·政务
guslegend3 小时前
2.Redis核心数据结构
数据结构·数据库·redis
Daydream.V3 小时前
Redis 零基础入门到实战:数据结构 + 常用命令 + 场景全覆盖
数据结构·数据库·redis
小a彤3 小时前
atvoss:Vector 算子子程序模板库,让 Ascend C 开发效率提升 5 倍
android·c语言·数据库