下面的old 是原来的查询, 大概花了 58秒, 下面经过优化后的, 执行了22秒.


核心思想:  先缩小数据范围, 然后再和其他的表做 关联查询.



----new 2018-07-03 
insert into @tab_xmxkxx
select DISTINCT CONVERT(NVARCHAR(50),GETDATE(),112) AS jhrq,
tab_sgxkdwxx.wsslbh as wsslbh,
tab_xmxkxx.xmmc as xmmc,
tab_sgxkdwxx.dwmc AS zbdwmc,
CONVERT(NVARCHAR(50),tab_xmxkxx.sdrq,112) AS hfxkzrq,
tab_xmxkxx.fzdwmc AS hfxkzbm

from
(select bjbh,bdh,wsslbh,dwmc FROM [SgXk].[tab_zbb_xmxkxx_dwxx] AS sgxkdwxx where ISNULL(sgxkdwxx.wsslbh,'') <> '' AND sgxkdwxx.dwlb = 'sg') tab_sgxkdwxx,
(select bjbh,bdh,xmmc,fzdwmc,sdrq from sgxk.tab_zbb_xmxkxx xmxkxx where xmxkxx.state='SdApproved' and xmxkxx.fzrq BETWEEN @startTime AND @endTime) tab_xmxkxx,
@tab_htxx as tab_htxx
where tab_sgxkdwxx.bjbh = tab_xmxkxx.bjbh COLLATE Chinese_PRC_CS_AS and tab_sgxkdwxx.bdh = tab_xmxkxx.bdh COLLATE Chinese_PRC_CS_AS
and tab_sgxkdwxx.wsslbh = tab_htxx.wsslbh;

-----------------------------------------------------------------------------------------------------------------------------------

/*
-- old 2018-06-12
insert into @tab_xmxkxx
SELECT DISTINCT CONVERT(NVARCHAR(50),GETDATE(),112) AS jhrq,
sgxkdwxx.wsslbh AS wsslbh,
xmxkxx.xmmc AS xmmc,
sgxkdwxx.dwmc AS zbdwmc,
CONVERT(NVARCHAR(50),xmxkxx.sdrq,112) AS hfxkzrq,
xmxkxx.fzdwmc AS hfxkzbm FROM [SgXk].[tab_zbb_xmxkxx_dwxx] AS sgxkdwxx
LEFT JOIN sgxk.tab_zbb_xmxkxx xmxkxx ON xmxkxx.bjbh COLLATE Chinese_PRC_CS_AS = sgxkdwxx.bjbh COLLATE Chinese_PRC_CS_AS AND sgxkdwxx.bdh COLLATE Chinese_PRC_CS_AS = xmxkxx.bdh COLLATE Chinese_PRC_CS_AS
WHERE ISNULL(sgxkdwxx.wsslbh,'') <> '' AND xmxkxx.state='SdApproved' AND sgxkdwxx.dwlb = 'sg'

AND sgxkdwxx.wsslbh IN (SELECT wsslbh FROM @tab_htxx)
*/
-------------------------------------------------------------------------------------