mysql - 需要优化 SQL 查询 - 执行需要花费大量时间

标签 mysql sql optimization query-optimization

我们有一个下面的查询,执行大约需要 6-8 秒。 记录总数:522954

(SELECT 
        * 
      FROM
        tbl_insights_copy
      WHERE insightscat = 21 
        AND submitedon >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY)) 
      ORDER BY submitedon DESC 
      LIMIT 5) 
      UNION
      (SELECT 
        * 
      FROM
        tbl_insights_copy 
      WHERE insightscat = 22 
        AND submitedon >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY)) 
      ORDER BY submitedon DESC 
      LIMIT 5) 
      UNION
      (SELECT 
        * 
      FROM
        tbl_insights_copy 
      WHERE insightscat = 23 
        AND submitedon >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY)) 
      ORDER BY submitedon DESC 
      LIMIT 5) 
      UNION
      (SELECT 
        * 
      FROM
        tbl_insights_copy 
      WHERE insightscat = 24 
        AND submitedon >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY)) 
      ORDER BY submitedon DESC 
      LIMIT 5)

有人可以帮助优化此查询以减少执行时间。 提前致谢。

最佳答案

您在一个选择和另一个选择之间唯一改变的是 insightscat 列的过滤器值,我不确定这是否是您想要的,但是......

您可以为此尝试使用IN 指令。示例:

SELECT 
        * 
FROM
        tbl_insights_copy 
      WHERE insightscat in (20,21,22,23,24)
        AND submitedon >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY)) 
      ORDER BY submitedon DESC 

关于mysql - 需要优化 SQL 查询 - 执行需要花费大量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43350513/

相关文章:

php - SQLSTATE [HY000] [1049] 未知数据库 'laravel'

MySQL:从交叉连接行返回总记录数?

mysql - MySQL IN 子句的特点

performance - Haskell中的懒惰和尾递归,为什么会崩溃?

mysql - 选择最早和最晚日期

mysql - 根据匹配条件连接表,并从 Table1.Quantity 的总和中减去 Table2.Quantity 的总和以获取匹配行

sql - Mybatis:如何从传入的参数中获取第一个元素?

mysql - SQL 一对多?

mysql - 什么查询最快?

Mysql查询选择两个表