【发布时间】:2019-11-09 08:40:03
【问题描述】:
我无法通过搜索找到它,所以我想我问的方式不对,所以欢迎提供帮助。
我们有一个查找表:
Id Name
------------------
1 "Test"
2 "New"
3 "InProgress"
表2:
StatusId SomethingElse
1
2
表 1
ID Other Other StatusId (Fkey to Table2) ...
然后我们有一个从多个表中选择的视图,其中一列是 CASE 语句:
SELECT * FROM Table1 t1 -- has million records
CASE When t1.StatusId = 1 THEN (SELECT Name from LOOKUP table where ID = 1) END --'Test'
CASE When t1.StatusId = 2 THEN (SELECT Name from LOOKUP table where ID = 2) END --'New'
CASE When t3.Date is not null THEN (SELECT Name from LOOKUP table where ID = 3) END --'In Progress'
-- AND ALSO the case look at other tables another 5-6 tables and there are conditions from there
INNER JOIN Table2 t2 on ...
INNER JOIN Table3 t3 on ...
如您所见,这些实际上是静态值。
我想将它们加载到变量中,例如
@LookUp1 = SELECT [NAME] FROM LookUP WHERE Id = 1,
@LookUp2 = SELECT [NAME] FROM LookUP WHERE Id = 2
并将 CASE 语句中的 select 替换为:
When StatusId = 1 THEN @LookUp
When StatusId = 2 THEN @LookUp2
视图循环遍历数百万条记录,从查找表中为每一行进行选择非常慢。
【问题讨论】:
标签: sql-server performance tsql