博客
关于我
MySQL 添加索引,删除索引及其用法
阅读量:794 次
发布时间:2023-02-10

本文共 2171 字,大约阅读时间需要 7 分钟。

一. 索引的作用

在大多数应用系统中,读写比例通常在10:1左右。虽然插入操作和更新操作相对少见,但最容易引发性能问题的却是复杂的查询操作。因此,查询语句的优化显得尤为重要,而建立正确合理的索引则是 MySQL 优化的重要手段。

索引的基本作用是通过减少访问数据的范围来加快查询速度。就像使用字典查找单词时,我们会从字母表的开头开始定位,这样可以快速找到目标单词。如果没有索引,可能需要逐一检查所有单词才能找到目标。这不仅适用于数据库查询,也适用于现实生活中的场景,如火车站的车次表和图书馆的目录等。

在实际操作中,索引的创建需要综合考虑哪些列会被频繁查询,并为这些列创建适当的索引。需要注意的是,索引本身是一种表,它保存着主键或索引字段及其对应的记录指针。开发者无法直接看到索引,它们只是用来加速查询的工具。

需要注意的是,虽然索引能够显著提升查询速度,但在执行插入或更新操作时,数据库也需要更新对应的索引值,这会增加操作时间。因此,在索引选择上需要权衡。


二. 索引的创建与删除

1. 索引的类型

索引可以分为以下几种类型:

  • UNIQUE 索引:不允许重复值,但可以包含 NULL。
  • 普通索引:允许重复值。
  • PRIMARY KEY 索引:不允许重复值,通常用于主键。
  • FULLTEXT 索引:适用于全文检索,但效率较低。
  • 组合索引:将多个字段的值组合为一个索引,列值必须唯一。

2. 使用 ALTER TABLE 语句创建索引

可以在表创建完成后使用 ALTER TABLE 语句添加索引。支持创建普通索引、UNIQUE 索引和 PRIMARY KEY 索引:

ALTER TABLE table_name ADD INDEX index_name (column_list);ALTER TABLE table_name ADD UNIQUE INDEX index_name (column_list);ALTER TABLE table_name ADD PRIMARY KEY (column_list);
  • column_list:指定要索引的列,多列之间用逗号分隔。
  • 索引名 index_name 可选,如果不指定,MySQL会自动生成。

3. 使用 CREATE INDEX 语句创建索引

CREATE INDEX 语句用于在表中创建普通索引或 UNIQUE 索引。需要注意以下几点:

  • 对于 CHAR 或 VARCHAR 类型,建议指定长度;对于 BLOB 和 TEXT 类型,长度必须指定。
  • 索引名必须唯一,不可选。
  • CREATE INDEX 语句不能用于创建 PRIMARY KEY 索引。
CREATE INDEX index_name ON table_name (column_list);CREATE UNIQUE INDEX index_name ON table_name (column_list);

4. 删除索引

可以使用 ALTER TABLE 或 DROP INDEX 语句删除索引。注意以下几点:

  • DROP INDEX 语句可用于删除表中的索引。
  • 如果删除表中的一列,索引会自动删除。
  • 如果删除组合索引的所有列,索引会被完全删除。
DROP INDEX index_name ON table_name;ALTER TABLE table_name DROP INDEX index_name;ALTER TABLE table_name DROP PRIMARY KEY;

三. 索引的使用与注意事项

1. 使用 EXPLAIN 工具

EXPLAIN 语句可以帮助开发人员分析 SQL 语句的执行情况,观察 MySQL 如何利用索引来处理查询。例如:

EXPLAIN SELECT * FROM user WHERE id = 1;

2. 避免不走索引的 SQL

以下类型的 SQL 语句通常不会使用索引:

  • 包含函数运算的查询。
  • 使用 LIKE 操作且不使用 BINARYRNDS 等函数的查询。
  • 使用 OR 关键字的查询。
  • 使用 REGEXP 运算的查询。

3. 索引的优缺点

  • 优点

    • 显著提升查询效率。
    • 减少全表扫描的次数。
    • 提高数据访问速度。
  • 缺点

    • 提高插入、更新和删除操作的时间成本。
    • 索引文件会占用额外的磁盘空间。
    • 对于大型表,索引文件可能膨胀较快。

4. 建立索引的技巧

  • 索引不包含 NULL 列:如果某列允许 NULL 值,则不会被包含在索引中。
  • 使用短索引:对长字符串列建议使用前缀索引,控制前缀长度在 10-20 个字符之间。
  • 避免在文本、图片和位字段上建立索引:这些字段通常数据量大或取值范围小,索引效果有限。
  • 在 WHERE 和 JOIN 中使用索引:确保查询条件列和连接字段有索引。

5. SQL 优化建议

  • 避免在索引列上进行运算或比较。
  • 避免使用 NOT IN!=><= 等操作(但 BETWEENIN 是可以的)。
  • 在频繁查询的字段上建立索引,而不是在不常用的字段上建立索引。

结论

索引是数据库性能的重要因素,但也需要权衡其优缺点。在实际应用中,应根据具体需求选择合适的索引类型,并通过 EXPLAIN 工具分析查询性能,优化查询语句和索引结构。

转载地址:http://vfbfk.baihongyu.com/

你可能感兴趣的文章