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.