【问题标题】:Making my SQL Query more efficient让我的 SQL 查询更高效
【发布时间】:2013-03-21 18:03:06
【问题描述】:

我的数据库中有数百万个条目。

因为我用的是 3!!内部连接并放置大范围的日期,这个查询需要很长时间,比如几分钟。

有没有办法改进这个查询并仍然获得相同的数据?

这是我的查询:

SELECT 
    subscriptions.service_id, 
    service_send_type.usage, 
    service_send_type.price, SUM(IF(msg_t.status LIKE 'Success%', 1, 0)) AS s, 
    COUNT(1) AS t 
FROM (`subscriptions`) 
    INNER JOIN 
        `msg_t` ON `subscriptions`.`phone` = `msg_t`.`phone` AND subscriptions.id = msg_t.sub_id 
    INNER JOIN
        `msg` ON `msg`.`id` = `msg_t`.`msg_id` 
    INNER JOIN `service_send_type` ON `msg`.`service_id` = `service_send_type`.`service_id` 
        AND msg.sushi_service_id = service_send_type.sushi_service_id 
        AND msg.send_type = service_send_type.name 
        AND msg.service_id = subscriptions.service_id 

    WHERE 
        `subscriptions`.`service_id` IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) 
        AND 
        `subscriptions`.`added` >= '2013-01-28 00:00:00' 
        AND 
        `subscriptions`.`added` <= '2013-01-28 23:59:59' 
        AND 
        `msg_t`.`send_time` >= '2013-01-28 00:00:00' 
        AND 
        `msg_t`.`send_time` <= '2013-01-28 23:59:59' 

    GROUP BY 
        `subscriptions`.`service_id`, 
        `service_send_type`.`usage`, 
        `service_send_type`.`price`

【问题讨论】:

  • 除非您提供更多信息,否则不会。随意查看人们在要求改进 MySQL 查询性能时提供的信息。
  • 考虑日期列上的索引。

标签: mysql sql optimization


【解决方案1】:

您是否总是需要IN 查询?在您的查询中,IN 子句可以替换为subscriptions.service_id &lt; 17,这将产生巨大的影响。 IN 查询适用于具有离散值列表的情况。

还要查看表上的索引。您应该在where 条件和group by 子句中的列上设置索引。

【讨论】:

  • @DanRevah:什么变化给你带来了最显着的改进?
【解决方案2】:

您可以尝试optimize your query by analyzing the Explain plan,包括index optimizing,如果您的桌子上仍然没有 idnex,这将非常有帮助。关于语句优化看here

希望对您有所帮助

【讨论】:

  • @ypercube 你说得对,其实只是语法问题,刚刚学到东西,谢谢。
  • 我更喜欢c &gt;= '2013-01-28' AND c &lt; '2013-01-29,因为它更易于编码,适用于任何日期时间类型(日期、日期时间、时间戳),并且在列的数据类型高于秒粒度时不会中断。
猜你喜欢
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
相关资源
最近更新 更多