sql - SQL Server:查询性能优化
问题描述
我有以下查询,其执行时间随着数据的增加而变得非常高。我该如何优化呢?
SELECT
txh.clid AS clid,
txh.id AS hlid,
holdinNo,
holding,
ClientID AS cliendID,
ClientName,
itm.itemID,
itm.Item,
itm.rate,
(SELECT TOP 1 asset
FROM tx_asset
WHERE tx_asset.hlid = txh.id
ORDER BY id DESC) AS asset
FROM
tx_holding AS txh
INNER JOIN
tx_set_bill_holding AS itm ON txh.id = itm.hlid AND itm.status = 1
WHERE
txh.id IN (SELECT hlid FROM tx_asset
WHERE asset IS NOT NULL AND asset != 0)
AND txh.id NOT IN (SELECT hlid FROM tx_bill_pay
WHERE YEAR(date_month) = YEAR(@tdate)
AND hlid IS NOT NULL)
AND txh.clid IN (SELECT id FROM tbl_client
WHERE client_type = 'Non-Govt.')
AND itm.type = 'Non-Govt.'
AND txh.roadno = @roadno
解决方案
尝试这个 :
SELECT hlid,max(asset) asset into #temp FROM tx_asset group by hlid
SELECT txh.clid AS clid,
txh.id AS hlid,
holdinNo,
holding,
ClientID AS cliendID,
ClientName,
itm.itemID,
itm.Item,
itm.rate,
t.asset
FROM tx_holding AS txh
INNER JOIN tx_set_bill_holding AS itm ON txh.id = itm.hlid AND itm.status=1
INNER /*or left*/ join #temp t on t.hlid=txh.id
WHERE txh.id IN
(
SELECT hlid FROM tx_asset WHERE asset IS NOT NULL AND asset!=0
)
AND txh.id NOT IN
(
SELECT hlid FROM tx_bill_pay WHERE year(date_month)=year(@tdate) AND hlid IS NOT NULL
)
AND txh.clid IN
(
SELECT id FROM tbl_client WHERE client_type='Non-Govt.'
)
AND itm.type='Non-Govt.' AND txh.roadno=@roadno
Drop table #temp
推荐阅读
- arrays - 更改 R 中数组的维度
- r - ggplot2 中的瀑布图似乎无法正确呈现
- sql-server - 如何插入小日期时间
- python - Django intersect count annotate 用于排序
- .htaccess - 从 URL 请求中删除 .php 文件扩展名
- vba - 将每日电子邮件从 Excel 发送到 Outlook - 包括数据透视表
- electron - 为多个操作系统打包大型电子应用程序
- angular - 如何在角度打字稿中取消选择输入收音机上先前设置的选择
- javascript - 使用 openwhisk 操作在 Mongodb 中查询
- .net - System.Drawing.FontFamily.Families 在 Windows 10 上包含一个名称为空的字体系列