【发布时间】:2022-01-17 19:18:53
【问题描述】:
我有一个简单的查询,它使用由另一列排序的 where 子句。
select *
from `Domains`
where `status` != 'error_name_not_resolved'
order by `analyzed_at` asc limit 10;
我有三个索引:
- 一个用于
status列。 - 一个用于
analyzed_at列。 -
status和analyzed_at列的一个复合索引。
不过,查询真的很慢,即使 5 分钟后我也没有得到答案(该表包含 1400 万个文档)。
奇怪的是,同样的查询降序的速度确实很快(响应以毫秒为单位)。
select *
from `Domains`
where `status` != 'error_name_not_resolved'
order by `analyzed_at` desc limit 10;
我还可以看到复合索引不是与EXPLAIN 一起使用的索引。
我错过了什么吗? ????
【问题讨论】:
-
(analyzed_at, status)的综合索引可能会有所帮助……但概率不高。如果不是没有索引可能会有所帮助。 -
什么是大约。具有
status = 'error_name_not_resolved'的行的百分比? -
@Akina,大约 1% 到 2%,还有什么是无索引? (在 Google 上找不到答案)
-
@Akina 我认为可能有帮助的索引实际上是您提到的索引,但是交换了列。
-
为了帮助您解决query-optimization 的问题,我们需要更多信息。具体来说,一个表定义和 EXPLAIN 输出。请read this,然后edit您的问题。
标签: mysql sql performance query-optimization database-performance