【发布时间】:2015-11-27 19:37:29
【问题描述】:
我有一个像这样的内部连接:
INNER JOIN Area AS area ON (Area.Id = psaLocalityOrCity.AreaId OR Area.Id = psaDbl.AreaId)
psaLocalityOrCity 是我需要区域的位置,但是有些记录在 psaLocalityOrCity 中重复。这些,并且只有这些,已作为单个记录提取到 psaDbl 中。上面的 INNER JOIN 假设可以找到两个组中所有地区的所有区域,但是这个 OR 语句导致它运行了很长时间。那会是什么原因呢?是否有任何修复可以优化查询以再次运行 6 秒而不是 3 分钟?
【问题讨论】:
-
INNER JOIN with
OR难怪它很慢,查看执行计划并检查它是否使用索引或执行全表扫描 -
显示所有查询,试试
WITH cte AS (SELECT * FROM psaLocalityOrCity UNION ALL SELECT * FROM psaDbl) SELECT * FROM tab JOIN cte,当然用列名替换* -
检查该 id 的类型是否相同。在这些情况下,隐式转换是导致速度缓慢的第一大原因。原因 #2 不好或缺少索引
标签: sql tsql join inner-join