【发布时间】:2014-07-31 10:01:34
【问题描述】:
这是我的 SQL 命令:
SELECT
ts.CHECK_NUMBER,
ts.CUSTOMER_NAME,
ts.COMPANY_NAME,
( SELECT COUNT(*)
FROM TRANSACTION_ORDER too
WHERE too.CHECK_NUMBER = ts.CHECK_NUMBER
) as NB_OF_ORDERS
FROM
TRANSACTION_SUMMARY ts
ORDER BY
ts.BUSINESS_DATE
渲染数据需要很长时间,我们正在谈论至少 3000 笔交易,对于每笔交易,我们必须计算订单。
有没有更好的解决方案?
【问题讨论】:
-
您可以尝试使用 JOIN。但是当您遇到性能问题时,您应该真正添加有关您拥有的索引和查询的解释计划的详细信息。这些细节对于了解可以优化的内容绝对是基础。
-
transaction_summary.business_date列上是否有(升序)索引,是否聚集或其他?transaction_order.check_number的同样问题... -
正如@Frazz 提到的,您可以从 SSMS 获得执行计划。分析它并确保计划中的任何内容都使用适当的索引。如果某些列不存在索引,则 sql-server 将执行可能非常昂贵的表扫描。
标签: sql sql-server performance database-performance query-performance