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

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

  • 缺点

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

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

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

总结

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

相关推荐
老华带你飞3 小时前
医院挂号|基于Java医院挂号管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
豐儀麟阁贵3 小时前
9.6使用正则表达式
java·开发语言·数据库·mysql
亿坊电商3 小时前
如何检查CMS建站系统的数据库链接问题?
数据库·cms
煎蛋学姐3 小时前
SSM宿舍管理系统8n6jf(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·宿舍管理系统·ssm 框架·高校后勤信息化
+VX:Fegn08954 小时前
人力资源管理|基于springboot + vue人力资源管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
姓蔡小朋友4 小时前
Redis内存回收
前端·数据库·redis
TDengine (老段)4 小时前
TDengine 地理函数 ST_GeomFromText 用户手册
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
一 乐4 小时前
海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot
西岭千秋雪_4 小时前
MySQL日志梳理(服务器层)
java·运维·服务器·数据库·mysql