【Mysql】三大组合拳 (索引、锁、事务) 之 重拳--“索引”

1、什么是索引

索引是一种帮助数据库系统提高查询效率的数据结构。它通过按照特定的规则对数据进行排序和存储,从而加快数据的检索速度。

索引的优点

  • 大大加快数据查询速度

索引的缺点

  • 维护索引需要耗费数据库资源
  • 索引需要占用磁盘空间
  • 数据的增删改操作需要维护索引,影响操作速度

2、索引分类

  • 主键索引:设定为主键后数据库会自动建立索引,InnoDB为聚簇索引
  • 单值索引:一个索引只包含单个列,一个表可以有多个单列索引
  • 唯一索引:索引列的值必须唯一,但允许有空值
  • 复合索引:一个索引包含多个列
  • 全文索引:全文索引类型为FULLTEXT,支持值的全文查找,允许在这些索引列中插入重复值和空值,但只有MyISAM存储引擎支持全文索引。

(注:MyISAM存储引擎支持全文索引,而InnoDB存储引擎也在MySQL5.6版本之后开始支持全文索引)

3、索引的基本操作

主键索引

在创建表时,可以通过指定一个列作为主键来自动创建主键索引。例如:

sql 复制代码
CREATE TABLE t_user (
    id VARCHAR(20) PRIMARY KEY,
    name VARCHAR(20)
);

这样就可以自动创建一个名为 "PRIMARY" 的主键索引。要查看表中的索引,可以使用如下命令:

sql 复制代码
SHOW INDEX FROM t_user;

单列索引

在创建表时,可以通过在列定义之后使用 KEY 关键字来创建单列索引。如果要在建表后创建单列索引,可以使用 CREATE INDEX 语句。例如:

sql 复制代码
-- 建表时创建单列索引
CREATE TABLE t_user (
    id VARCHAR(20) PRIMARY KEY,
    name VARCHAR(20),
    KEY (name)
);
​
-- 建表后创建单列索引
CREATE INDEX nameindex ON t_user(name);

要删除索引,可以使用 DROP INDEX 语句:

sql 复制代码
-- 删除索引
DROP INDEX nameindex ON t_user;

这样可以有效地创建和删除单列索引。

唯一索引

在建表时创建唯一索引,可以在列定义后使用 UNIQUE 关键字来创建唯一索引。如果是在建表后创建唯一索引,可以使用 CREATE UNIQUE INDEX 语句。例如:

sql 复制代码
-- 建表时创建唯一索引
CREATE TABLE t_user (
    id VARCHAR(20) PRIMARY KEY,
    name VARCHAR(20),
    UNIQUE (name)
);
​
-- 建表后创建唯一索引
CREATE UNIQUE INDEX nameindex ON t_user(name);

这样可以有效地创建唯一索引。

复合索引

在建表时创建复合索引,可以在列定义后使用 KEY 关键字来创建复合索引。如果是在建表后创建复合索引,可以使用 CREATE INDEX 语句。例如:

sql 复制代码
-- 建表时创建复合索引
CREATE TABLE t_user (
    id VARCHAR(20) PRIMARY KEY,
    name VARCHAR(20),
    age INT,
    KEY name_age_index (name, age)
);
​
-- 建表后创建复合索引
CREATE INDEX name_age_index ON t_user(name, age);

这样可以有效地创建复合索引。

4、索引什么情况下会失效?

在以下情况下,可能无法充分利用索引:

  • 当查询语句中使用LIKE关键字进行查询时,如果匹配字符串的第一个字符为"%",索引通常不会被使用。如果"%"不是在第一个位置,索引会被使用。

  • 当查询语句中使用多列索引时,只有在查询条件中使用了这些字段中的第一个字段,索引才会被使用。

  • 当查询语句中使用OR关键字时,如果OR前后的两个条件的列都是索引,则查询中将使用索引。但如果OR前后有一个条件的列不是索引,查询中将不使用索引。

以上情况都会影响索引的使用效果,因此在设计数据库时,需要考虑这些因素以便进行优化。

相关推荐
kaixin_learn_qt_ing6 分钟前
解析Xml文件并修改QDomDocument的值
xml·数据库·qt
森林猿2 小时前
mongodb-数据备份和恢复
数据库·mongodb
oscube2 小时前
Apache AGE中的图
数据库·apache
科学的发展-只不过是读大自然写的代码2 小时前
qt播放视频
数据库·qt·音视频
激昂~逐流2 小时前
Qt使用sqlite数据库及项目实战
数据库·qt·sqlite·学生信息管理系统
svygh1233 小时前
数据库性能优化系统设计
数据库·性能优化·软件设计·系统设计·设计文档
wilsonzane4 小时前
Mongodb性能优化方法
数据库·mongodb
InterestingFigure4 小时前
Java 使用sql查询mongodb
java·开发语言·数据库·sql·mongodb
吹吹晚风-4 小时前
深入Django(三)
数据库·django·sqlite
xyh20044 小时前
python 10个自动化脚本
数据库·python·自动化