2016-04-13 18 views
0

(Salt okunur DB) Aşağıdaki nerede yan tümcesi var ve sorgu yavaşlatıyor. Aşağıda sahip olduğum şeyi yazmanın daha etkili bir yolu var mı? Ayrıca, yalnızca verileri yalnızca 2016 için nasıl geri çekebilirim? OR ifadesini kullanarak? Eğer ProcedureCode tabloyla birçok ilişki çok var için şema değiştiremiyorsanızSQL Server 2008 - Madde ve OR nerede ve OR

WHERE 1=1 
AND b.Year(b.CreateDate) >= '2016' 
AND B.ProcedureCode1 IN ('G0277','99183') 
OR B.ProcedureCode2 IN ('G0277','99183') 
OR B.ProcedureCode3 IN ('G0277','99183') 
OR B.ProcedureCode4 IN ('G0277','99183') 
OR B.ProcedureCode5 IN ('G0277','99183') 
OR B.ProcedureCode6 IN ('G0277','99183') 
OR B.ProcedureCode7 IN ('G0277','99183') 
OR B.ProcedureCode8 IN ('G0277','99183') 
OR B.ProcedureCode9 IN ('G0277','99183') 
OR B.ProcedureCode10 IN ('G0277','99183') 
+3

Biz şema hakkında çok az şey biliyoruz. –

+2

ProcedureCodexx sütunlarından ProcedureCode birleştirme tablosuna birçok ilişkiden kurtulabilir misiniz? –

+0

Eğer() örneğin "NEREDE 1 = 1 VE ( B.ProcedureCode1 IN ('G0277', '99183') VEYA B.ProcedureCode2 İÇİNDE ('G0277',' bütün VEYA maddelerini koymak deneyebilirsiniz 99183 ') VEYA B. ProcedureCode3 IN (' G0277 ',' 99183 ') VEYA B. ProcedureCode4 IN (' G0277 ',' 99183 ') "... ) –

cevap

0

, kendi ProcedureCodexx tablolarda dizinler oluşturmak için deneyebilirsiniz:

CREATE NONCLUSTERED INDEX IX_B_ProcedureCode1 
ON B (ProcedureCode1) 
GO 

CREATE NONCLUSTERED INDEX IX_B_ProcedureCode2 
ON B (ProcedureCode1) 
GO 
+0

Teşekkürler, birkaç soru. Bunu sorgumda nereye eklerim? Beyan, Set, IF ve sonra Select Deyimi var. Ayrıca, doğru sözdizimi CREATE NONCLUSTERED INDEX IX_B_ProcedureCode1 ON gibi görünecektir. Dim_ServiceLines (99183) GO –

+1

Daha hızlı arama yapmak için sütunlarınızda dizin oluşturmak için bunu yalnızca bir kez çalıştırmalısınız. Daha fazla bilgi için lütfen bkz: http://www.w3schools.com/sql/sql_create_index.asp Ayrıca ProcedureCodexx deseninden kurtulmak için tablo tanımınızı değiştirmenizi tavsiye ederim. –