如何判断数据库索引是否对某个 SQL 的查询生效?

151 阅读1分钟

1. 使用 EXPLAIN 或 DESCRIBE 语句

这些语句可以显示 SQL 查询的执行计划,来了解查询是如何执行的以及使用了哪些索引。

EXPLAIN SELECT * FROM record WHERE account_id = 'some_id' AND record_time BETWEEN '2023-01-01' AND '2023-01-31';

运行这条语句后,会得到一个表格,包含查询的执行计划。重点关注以下字段:

  • type: 显示访问类型,值从最好到最差依次为:system、const、eq_ref、ref、range、index、ALL。ALL 表示全表扫描,通常是性能最差的。
  • key: 显示使用的索引。
  • rows: 估计需要扫描的行数。通常,行数越少,查询性能越好。
  • Extra: 包含额外的信息,比如是否使用了文件排序或临时表。

2. 分析查询执行时间

在应用程序中或使用数据库客户端工具,记录使用索引前后执行相同查询所花费的时间进行对比。

-- 记录查询执行时间
SET profiling = 1;
-- 执行查询
SELECT * FROM record WHERE account_id = 'some_id' AND record_time BETWEEN '2023-01-01' AND '2023-01-31';
-- 查看查询执行时间
SHOW PROFILES;