Lapas

piektdiena, 2014. gada 6. jūnijs

Vaicājuma sadalīšana vairākās daļās

Pēdējās nedēļās tā vairāk sanācis nodarboties ar ātrdarbības lietām. Šeit neliels sausais atlikums un daži padomi, kas var noderēt dzīvē.

Visbiežāk sastaptā lieta- Where daļa ar OR. 


Izskatās tā:
Where (@ID Is Null OR ID = @ID) AND ...
Šāds vaicājums būtu jāsadala vairākās daļās ar IF, vai jāizmanto dinamiskais vaicājums (paturot prātā, ka tad var būt jādarbojas ar lietotāju tiesībām). Piemēram:
IF(@ID Is Null)
... Vaicājums
ELSE
... Vaicājums + Where ID = @ID

Otra lieta- tabula bez klasterētā indeksa. 

SQL Server ļoti retos gadījumos strādā labāk ja tāda nav. Principā 99.9% varbūtība, ka vajag uzlikt klasterēto indeksu, ja sastopaties ar tabulu kurai tāda nav.

Saite ar OR vai Case

Piemēram:
table1 t1 Left Join table2 t2 on t1.ID = t2.CitsID OR t1.ID = t2.VelCitsID
Risinājums- veidot vaicājumu ar UNION ALL

Pēdējā laika top raksti

MSDN: When To Break Down Complex Queries
Stackoverflow: What are the most common SQL anti-patterns?

Nav komentāru:

Ierakstīt komentāru