【发布时间】:2019-05-08 08:01:46
【问题描述】:
为什么下面的查询要快很多?
查询 1:
select distinct ID mid
INTO #t1
from A_Position a where a.situationdate=@SituationDate and
a.Portfolio_Name=@portfolio and a.Purpose=@purpose and ID!='TOTAL'
select distinct ID gid
INTO #t2
from B_Position a where a.situationdate=@SituationDate and
a.Purpose=@purpose
select @check=COUNT(mid) from #t1 A INNER JOIN #t2 B ON A.mid =
B.gid
查询 1 比查询 2 快得多。
查询 2:
;With
A as (
select distinct ID mid
from A_Position a where
a.situationdate=@SituationDate and a.Portfolio_Name=@portfolio and
a.Purpose=@purpose and ID!='TOTAL'),
B as(
select distinct ID gid
from B_Position a where
a.situationdate=@SituationDate and a.Purpose=@purpose)
select @check=COUNT(mid) from A INNER JOIN B ON A.mid =
B.gid
查询 3:
select @check=COUNT(*)
from (
select distinct ID mid
from A_Position a where a.situationdate=@SituationDate and
a.Portfolio_Name=@portfolio and a.Purpose=@purpose and
ID!='TOTAL') A
inner join ( select distinct ID gid
from B_Position a where
a.situationdate=@SituationDate and a.Purpose=@purpose) B on mid=gid
基本上,所有三个查询都有相同的结果,但查询 1 只需要 1-2 秒即可执行。另一方面,查询 2 或 3 需要 10 多分钟才能执行。为什么编写代码的方式会有如此巨大的差异? (为什么“With”慢)
【问题讨论】:
-
SQL Server 和 MySQL 是两种截然不同的产品。请不要同时标记它们。请仅标记您正在使用的 RDBMS。我已经删除了 2 个冲突的标签。
-
可能不相关,但查询 2 缺少其他两个查询具有的 DISTINCT(用于 B_Position)。
标签: sql sql-server common-table-expression query-performance