【问题标题】:SQL Slow Query ExecutionSQL慢查询执行
【发布时间】:2015-01-06 08:43:21
【问题描述】:
SELECT s.supplier_id, s.supplier_name, o.order_date
FROM suppliers s, orders o
WHERE s.supplier_id = o.supplier_id
AND o.cust_reference = 9
ORDER BY o.order_date;

这个查询应该执行得很慢,并且要花将近 10 分钟 来执行,请问如何改进查询时间?

【问题讨论】:

  • 耗时较长的原因是where子句中的“join”操作。您可以在此处添加子查询以提高性能
  • 看看这个解释:stackoverflow.com/a/129410/3063884
  • 谢谢大家,我也会查看提供的链接
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式应该不再使用,而是建议使用ANSI-92 SQL 标准引入的正确的 ANSI JOIN 语法(20 多年前

标签: sql query-performance


【解决方案1】:

检查执行计划。查找表扫描。确保表上存在相关索引。并从使用昂贵的 WHERE 子句语法的 'FROM X,Y' 更改为 INNER JOIN

SELECT s.supplier_id, s.supplier_name, o.order_date
FROM suppliers s
INNER JOIN orders o ON s.supplier_id = o.supplier_id
WHERE o.cust_reference = 9
ORDER BY o.order_date;

【讨论】:

    【解决方案2】:

    尝试下面的查询,因为 o.cust_reference = 9 也用于连接,因此它的执行速度很快,因为连接只发生在 cust_reference = 9 的行上

    SELECT s.supplier_id, s.supplier_name, o.order_date
    FROM suppliers s
    INNER JOIN orders o ON s.supplier_id = o.supplier_id
    AND o.cust_reference = 9
    ORDER BY o.order_date;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 2021-03-06
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      相关资源
      最近更新 更多