mysql - 为什么 mysql 查询运行缓慢,即使语句上的解释另有说明?

标签 mysql amazon-rds amazon-aurora

这是我的查询

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 英寸才能执行......我对此有点困惑

最佳答案

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

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

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

CREATE INDEX idx ON MyTable (env, HTML);

关于mysql - 为什么 mysql 查询运行缓慢,即使语句上的解释另有说明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55374557/

相关文章:

php - 使用一列中的 ORDER BY 显示 Mysql 数据库中的数据

php - 按多个字段搜索。有时按一个字段,有时按多个字段

amazon-ec2 - CloudFormation Drupal 模板在哪里创建 MySQL 数据库?

php - 如何从我的 mysql 中选择 5 个最新行

php - 尝试在 php 中使用 count(*) 时收到 undefined variable

sql - AWS RDS Postgres : No space left on Device

ruby-on-rails - 尝试使用 heroku gem 将我的数据库推送到 Amazon RDS 时出现 'Application Error'

mysql 空值情况当为 null 时不起作用

postgresql - 如何使用带有制表符分隔符的 `aws_s3.query_export_to_s3` 从 RDS/Aurora 导出到 S3?

amazon-web-services - 通过 CloudFormation 中的 SecretsManager 获取 AWS::RDS::DBCluster 的 MasterUserPassword