mysql - 如何加快MySQL数据库中SQL查询的执行时间?

标签 mysql sql performance query-optimization

下面是我的 SQL 查询。

SELECT `left_table`.`right_table_id`, MAX(left_table.add_time) AS max_add_time 
    FROM `left_table` 
    LEFT JOIN `right_table` ON `left_table`.`right_table_id` = `right_table`.`id` 
    WHERE left_table.add_time <= NOW()
        AND (
                (right_table.some_id = 1 AND right_table.category != -2)
                OR
                (right_table.another_id = 1 AND right_table.category != -1)
        ) AND NOT(right_table.category = -3) 
        AND NOT(right_table.category = -4) 
    GROUP BY `right_table_id` 
    ORDER BY `max_add_time` DESC, `left_table`.`id` DESC
LIMIT 12

执行此查询需要5356.6ms。对我来说这需要太长时间。我一直在努力加快执行时间。但没有结果。如何提高上述查询的执行时间?

最佳答案

嗯。 。 。我首先会编写这样的逻辑:

SELECT COUNT(DISTINCT lt.`right_table_id`)
FROM `left_table` lt LEFT JOIN
     `right_table` rt
      ON lt.`right_table_id` = rt.`id` 
WHERE lt.add_time <= NOW() AND
      ((rt.some_id = 1 AND rt.category <> -2) OR
       (rt.another_id = 1 AND rt.category <> -1)
      ) AND
      rt.category NOT IN (-3, -4);

可能还有其他简化,具体取决于 lt.right_table_id 是否始终与右表中的行匹配(或者为 NULL)。以及其他各种考虑因素。

关于mysql - 如何加快MySQL数据库中SQL查询的执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45037728/

相关文章:

mysql - 将 SUM 除以 Count 将返回错误结果

c++ - 小型固定长度 key 的快速散列

c++ - 对一段独立于 CPU 性能的代码进行基准测试?

php - PHP 中的变量、常量和关联数组

php - 把 SELECT 变成 DELETE mysql php

mysql - 更改 MySQL 存储过程的所有者?

MYSQL存储过程删除

MySQL:将表字段连接到相关结果集

mysql - 加入两个表并从第二个表中读取两条记录

c# - EF : order by 2 fields when they are not null