我正在尝试提高以下查询的性能,该查询需要 1 分钟以上的时间才能执行:
SELECT *
FROM test
WHERE ( created_at < '2023-3-31 06:10:20.871' )
AND ( ( id > '2a95048f' )
OR ( id = '2a95048f'
AND created_at > '2022-12-27 23:53:24.958' ) )
ORDER BY id ASC,
created_at ASC
LIMIT 1000;
我通过切换 ORDER BY 中的顺序来更改查询,查询在 549 毫秒内返回结果:
SELECT *
FROM test
WHERE ( created_at < '2023-3-31 06:10:20.871' )
AND ( ( id > '2a95048f' )
OR ( id = '2a95048f'
AND created_at > '2022-12-27 23:53:24.958' ) )
ORDER BY created_at ASC,
id ASC
LIMIT 1000;
以下是有关索引的一些信息:
- ID - 基数 680 万,唯一
- CREATED_AT - 基数 710 万,不是唯一的
为什么一个比另一个性能显着?
更新 - “显示来自测试的索引”