哪个SQL查询执行得更快
问题描述:
当我运行这两个查询时,SQL Server Management Studio中的客户端统计信息显示第二个查询的总执行时间更快。谁能告诉我为什么第二个查询更快?哪个SQL查询执行得更快
SELECT MERCHANT_NO,
(SELECT CASE WHEN CITY IS NULL OR CITY='' THEN m.CITY
ELSE
COALESCE((SELECT c.CITY
FROM CODE_CITY c
WHERE m.CITY=c.CODE_CITY_ID
), m.CITY)
END) AS CITY,
(SELECT CASE WHEN STATE IS NULL OR STATE='' THEN m.STATE
ELSE
COALESCE((SELECT s.STATE
FROM CODE_STATE s
WHERE m.STATE=s.CODE_STATE_ID
), m.STATE)
END) AS STATE,
(SELECT MERCHANT_CAT_DESC FROM MERCHANT_CAT mc WHERE mc.MERCHANT_CAT_ID=m.MERCHANT_CAT_ID) AS MERCHANT_CAT_DESC
FROM MERCHANT m
WHERE 1=1
SELECT MERCHANT_NO,
(SELECT CASE WHEN t.CITY IS NULL OR t.CITY='' THEN m.CITY
ELSE
t.CITY
END AS CITY
FROM(
SELECT
CASE WHEN CITY IS NULL OR CITY='' THEN ''
ELSE
(SELECT c.CITY
FROM CODE_CITY c
WHERE merc.CITY=c.CODE_CITY_ID
)
END AS CITY
FROM MERCHANT merc
WHERE merc.MERCHANT_NO=m.MERCHANT_NO
) t) AS CITY_DESC,
(SELECT CASE WHEN cs.STATE IS NULL OR cs.STATE='' THEN m.STATE
ELSE
cs.STATE
END AS STATE
FROM(
SELECT
CASE WHEN STATE IS NULL OR STATE='' THEN ''
ELSE
(SELECT s.STATE
FROM CODE_STATE s
WHERE merc.STATE=s.CODE_STATE_ID
)
END AS STATE
FROM MERCHANT merc
WHERE merc.MERCHANT_NO=m.MERCHANT_NO
) cs) AS STATE_DESC,
(SELECT MERCHANT_CAT_DESC FROM MERCHANT_CAT mc WHERE mc.MERCHANT_CAT_ID=m.MERCHANT_CAT_ID) AS MERCHANT_CAT_DESC
FROM MERCHANT m
WHERE 1=1
答
您没有使用COALESCE在第二查询数据。所以只有它比第一个查询更快。
这将是学习如何使用'EXPLAIN'的好时机,它可能会揭示关于这两个查询的更多细节,而不是您可能收到的任何答案。 –
将两个查询从相关子查询转换为内部连接时,您将获得更快的执行时间 – cha
打开执行计划并运行两个查询,您可以自己看到 – TheGameiswar