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