mysql - 性能

标签 mysql sql performance

我有一条有效的 SQL 语句,但需要很长时间才能处理

我有一个 a_log 表和一个 people 表。我需要在 people 表中找到给定人员的每个 ID 的最后一个事件和关联的用户。

SELECT p.`id`, activity, appphone, appname, dateadd 
FROM people p
LEFT JOIN a_log a
ON p.id = a.id 
WHERE (  dateadd >= '2011/09/13 00:00' and dateadd <= '2011/09/13 23:59') 
AND (a.date_time = (SELECT MAX(a1.date_time)
       FROM activity_log a1
       WHERE a.id = a1.id
       GROUP BY id) OR date_time IS NULL)
    ORDER BY `id` desc limit 0, 100

我在 a_log 表中的 date_time 字段和 id 字段上有一个非唯一索引 我在 people 表的 id 字段上有一个主索引,在 dateadd 字段上有一个非唯一索引

如何缩短此查询的执行时间? 谢谢

最佳答案

这应该适合你:

SELECT p.`id`, p.activity, p.appphone, p.appname, p.dateadd, a.*
FROM people p
LEFT OUTER JOIN
(
    SELECT a.id, a.date_time, a.user  
    FROM activity_log a 
    INNER JOIN 
    (
        SELECT id, MAX(date_time) as date_time
                    FROM activity_log 
                    GROUP BY id
    ) a1  ON a.id = a1.id and a.date_time = a1.date_time
) a ON p.id = a.id 
WHERE (  dateadd >= '2011/09/13 00:00' and dateadd <= '2011/09/13 23:59'   and `agent_or_underwriter` != 'agent') 
ORDER BY p.id desc limit 0, 100

关于mysql - 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7407294/

相关文章:

MySQL 保存的数据不可选

mysql - 加入不同的表并用mysql在一行上显示匹配记录

SQL:源代码/底层

node.js - Heroku:如何正确扩展 Node.js 应用程序?

mysql - 是我表设计错误还是建表时选择的索引错误?

mysql - 更新索引字段时会发生什么?

php - ElasticSearch 在 MySQL 中的使用

c# - 使用实体的 InvalidProgramException

sql - 如何在 HAVING 子句中使用函数的输出?

php - PHP select where 与 left join 的性能