我试图基于包含不同文本条件的CONCAT
表达式联接表。
我尝试了一种效率低下的方法,只是查询时间太长。
SELECT
sf.displayId,
-- tw.displayText,
CASE
WHEN tw.DisplayText IN ('N/A', 'NotApplicable', 'Not Applicable')
THEN 'Not Applicable'
ELSE REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(tw.DisplayText,'client','Client'),'approved','Approved'),'rejected','Rejected'),'review','Review'),'Requirement','Requirement'),'open','Open'),'submitted','Submitted'),'complete','Complete'),'incomplete','Incomplete'),'pending','Pending'),'resubmit','Resubmit'),'Awaiting review','Awaiting Review')
END AS AuditStatus
FROM Connect.Data.supplier_form sf
JOIN Connect.Data.translation tw
ON ((CONCAT('workflowStepName' , sf.workflowStatusId) = tw.translationField) OR (CONCAT('workflowStepMessage' , sf.workflowStatusId) = tw.translationField))
AND tw.language = 'en'
WHERE sf.deleted = 0
AND tw.displayText IN ('Awaiting Review','Awaiting review')
ORDER BY sf.displayId
OFFSET 0 ROWS
FETCH NEXT 100 ROWS ONLY;
我想以一种更有效的方式基于Connect.Data.supplier_form sf
表达式加入CONCAT
。
答案 0 :(得分:0)
我不确定SQL优化器在SQL Server中的性能如何,因此您可以尝试翻转连接条件的顺序以使其更易于使用索引。我会做两件事:
我将JOIN
条件更改为:
JOIN Connect.Data.translation tw
ON tw.language = 'en'
AND tw.translationField in (
CONCAT('workflowStepName' , sf.workflowStatusId),
CONCAT('workflowStepMessage' , sf.workflowStatusId)
)
我将添加索引:
create index ix1 on Connect.Data.translation(language, translationField);
尝试一下,让我们知道它是否可以改善性能。