为什么mysql Query运行缓慢,即使声明中的解释说不然?

问题描述 投票:0回答:1

这是我的查询

SELECT 
    id
FROM
    `MyTable`
WHERE
    `env` = 'default'
        AND (`HTML` = '' OR `HTML` IS NULL)
order by `id` desc 
limit 100;

运行解释它我会得到:

Possible keys: idx_env  (related to env field in where clause)
Key: id
Key length: 4
Rows: 200
Filtered: 9.50
Extra: using where

从上面的解释我明白mySQL将检查200条记录。并且不应该有很大的性能问题

但我经常遇到的是50“的慢查询,实际上在我的Aurora集群上激活慢查询日志我看到以下报告:

 # Query_time: 49.512712 Lock_time: 0.000065 Rows_sent: 28 Rows_examined: 6795665

似乎没有一致的反馈:形成解释检查行是从日志200是所有记录...

编辑

env和id字段已经编入索引。 HTML未被故意编入索引,因为它是LONGTEXT类型

另外我想补充一点,有时在工作台上运行查询它会按预期快速响应,但通常需要50“才能执行....我对此有点困惑

mysql amazon-rds amazon-rds-aurora
1个回答
0
投票

我不知道你在这里使用了什么实际索引,但这可能是提高查询性能的索引:

CREATE INDEX idx ON MyTable (env, HTML, id);

这将允许MySQL使用两个字段有效地过滤掉WHERE子句中的匹配。此索引还涵盖了您选择的id,也用于排序。请注意,如果id是主键,并且您使用的是InnoDB引擎,则可以将索引简化为以下内容:

CREATE INDEX idx ON MyTable (env, HTML);
© www.soinside.com 2019 - 2024. All rights reserved.