【发布时间】:2017-08-07 06:40:09
【问题描述】:
我有这样的疑问。但是我需要优化这个查询,所以如何省略具有相同拆分功能的冗余条件。
DECLARE @Filter nvarchar(20)
SELECT @Filter ='5,22,3'
SELECT * FROM Employee e
WHERE e.code IN
(
CASE WHEN((SELECT count(*) FROM dbo.FNSPLITSTRING(SUBSTRING(@Filter,1,LEN(@Filter)-1), ',') d
WHERE d.splitdata IN (5, 16, 20, 23, 33, 49, 62, 90, 91, 92, 93, 94))>0) THEN 5 ELSE 0 END
,CASE WHEN((SELECT count(*) FROM dbo.FNSPLITSTRING(SUBSTRING(@Filter,1,LEN(@Filter)-1), ',') d
WHERE d.splitdata IN (22, 18))>0) THEN 46 ELSE 0 END
,CASE WHEN((SELECT count(*) FROM dbo.FNSPLITSTRING(SUBSTRING(@Filter,1,LEN(@Filter)-1), ',') d
WHERE d.splitdata IN (3, 28))>0) THEN 3 ELSE 0 END
)
【问题讨论】:
-
最好的优化是停止使用包含逗号的字符串作为多个数据值的某种容器 - SQL Server 的数据类型 设计 来保存多个值 - 表和 xml。
标签: sql-server tsql optimization query-optimization