Execution plan

Már említettem néhányszor, de még nem írtam le, mi is ez valójában.

Minden lekérdezésnek (akár simán adjuk ki, akár tárolt eljárásban) van egy végrehajtási terve (execution plan). Amikor először lefuttatjuk a lekérdezést, az SQL szerver elkészít egy ilyen végrehajtási tervet, hogy valójában mit kell csinálnia. Lépésekre bontja a lekérdezést, feltérképezi, milyen indexeket tud esetleg használni, ezeket hogyan tudja érvényre juttatni, és így tovább.

Tehát ha kiadom mondjuk ezt:
select col1, col2, col3 from tabla where col1=3
akkor ennek a végrehajtási terve azt fogja jelenteni, hogy a szerver megvizsgálja a tabla-t, megnézi, hogy a col1-re van-e indexe, van-e esetleg olyan indexe, ami tartalmazza a col2 és col3 értékeit, megtervezi, hogyan tudja ezt a legjobban használni és ezt a tervet eltárolja.

A következő ilyesmi query-nél:
select col1, col2, col3 from tabla where col1=?
előveszi ezt a tervet, és ez alapján hajtja végre a lekérdezést.

Amikor legközelebb megint kiadod ugyanezt a lekérdezést, vagy egy nagyon hasonlót, ami nagyjából csak a beadott where értékekben különbözik, akkor a szerver előveszi ezt a tervet és ez alapján hajtja végre a lekérdezést. Nyerünk pár ezredmásodpercet, de ez milliós nagyságrendben már elég jelentős időnyereséget jelent.

Konyhanyelven ennyiről van szó, de később biztosan előkerülnek majd példák, amik alapján tovább részletezhetem a témát.