数据库之索引

1. 索引的定义

索引是一个排序的列表,包含索引字段的值和其对应的行记录的数据所在的物理地址。

索引的作用: 加快表的查询速度,还可以对字段排序。

2. 索引的工作方式

有了索引后,要根据条件查询某行数据时,需要先扫描全表,再定位某行数据的位置。有了索引之后,会先通过查询条件的字段值找到其索引对应的行记录数据的物理地址。然后根据物理地址访问相应的行记录的数据,就像根据书目录的页码快速找到所需的内容。

副作用:会额外占用磁盘空间,更新包含索引的表会花费更多的时间(效率会变慢)。

3. 创建索引的依据

1)表中的记录行数较多时,一般超过300行的表建议要有索引。

  1. 建议在表中的主键字段,外键字段,多表连接使用的公共关键字段、唯一性较好的字段、不经常更新的字段,经常出现在where、group by、order by子语句的字段,小文本字段上面创建索引。

3)不建议在唯一性较差的字段,更新太频繁的字段,大文本字段上面创建索引。

4. 索引的类型

普通索引

唯一索引

主键索引

组合索引

全文索引

5. 索引的增删查

bash 复制代码
##添加普通索引的方法
create index 索引名称 on 表名 (字段名);
 
alter table 表名 add index 索引名称 (字段);
 
还可以在创建表格时候就添加,但是不建议使用
create table 表名(字段1 数据类型,....index 索引名称 (字段));

唯一索引创建

与普通索引类似,但区别是唯一索引列的每个值都唯一。唯一索引允许有空值(注意和主键不同)。如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。

bash 复制代码
create unique index 索引名 on 表名 (字段名);
 
alter table 表名 add unique key (字段名);
 
alter table 表名 add unique 索引名 (字段名);

主键索引创建

是一种特殊的唯一索引,必须指定为"PRIMARY KEY"。一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。

bash 复制代码
alter table 表名 add primary key (字段名);

组合索引创建

可以是单列上创建的索引,也可以是在多列上创建的索引。需要满足最左原则,因为 select 语句的 where 条件是依次从左往右执行的,所以在使用 select 语句查询时 where 条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。

bash 复制代码
create index 索引名称 on 表名 (字段1,字段2...);
 
alter table 表名 add index 索引名称 (字段1,字段2...);

全文索引

适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。

bash 复制代码
create fulltext index 索引名称 on 表名 (字段);
 
alter table 表名 add fulltext 索引名称  (字段);
 
支持模糊查询   
select .... from 表名 where match(字段) against('单词');

查看索引

bash 复制代码
show create table 表名
show index from 表名
show keys from 表名

删除索引

bash 复制代码
drop index 索引名 on 表名;
alter table 表名 drop index 索引名;
alter table 表名 drop primary key;

6. 遇到select 语句查询速度慢怎么办

  1. 先使用explain分析select语句,看key字段,确定select 语句是否使用索引或索引是否使用正确。

  2. 再根据select语句中where子语句使用的条件字段创建相应的单列索引或组合索引,组合索引要满足最左原则。

相关推荐
白帽攻防录6 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
꯭自꯭闭꯭6 小时前
达梦SQL优化相关
linux·运维·数据库·sql
对空六课7 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
南京码讯光电技术有限公司7 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
lusklusklusk8 小时前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea8 小时前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
东方护航数据恢复(深圳)9 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
lusklusklusk10 小时前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle
PHP实战开发录11 小时前
MySQL字段加索引为什么没变快
数据库·mysql·php·开发
红红谈说12 小时前
标签化推送与已读统计怎么做?一次通知链路的工程复盘
数据库·消息推送·数字乡村·集合运算·已读回执·标签体系·写入放大