星期五, 4月 01, 2022

[SQL] STRING_SPLIT 執行計畫

在網路上看到有人在 Store Procedure 內傳入逗號分隔資料,並搭配 string_split 來搜尋資料,在練習發現執行計畫內都會有 [排序 (相異排序)] 操作子出現,等於 QO 會自動移除重覆資料,透過 AdventureWorks2019 Perosn.Person Table 來筆記

 [排序 (相異排序)] 操作子圖示和說明
The Distinct Sort logical operator scans the input, removing duplicates and sorting by the columns specified in the DISTINCT ORDER BY:() predicate of the Argument column. Distinct Sort is a logical operator.
測試語法,從執行計畫中就可以發現 [排序 (相異排序)] 存在,然後原本 4 筆資料就變成 3 筆啦
SELECT 
	[BusinessEntityID] ,
	ModifiedDate
FROM Person.Person
WHERE ModifiedDate IN 
	(
		-- 20060623 為重覆資料
		SELECT CAST(Value as datetime)
		FROM STRING_SPLIT('20060623,20060623,20070119,20071104' , ',')
	)
研究 string_split 文件並測試,是沒有移除重覆資料功能,單純就是把資料切分出來而已,資料還是 4 筆
SELECT Value FROM STRING_SPLIT('20060623,20060623,20070119,20071104' , ',')
IN 語法,從執行計畫 Operator 內發現,雖然沒有 [排序 (相異排序)],但只有 20060623,20070119,20071104 這三個條件出現而已
SELECT 
	[BusinessEntityID] ,
	ModifiedDate
FROM Person.Person
WHERE ModifiedDate IN ('20060623','20060623','20070119','20071104')
測試起來是 IN + string_split 就會自動出現 [排序 (相異排序)] 來移除重覆資料

沒有留言:

張貼留言