SQL lekérdezési teljesítmény
ebben az esetben nem fog észrevenni hatalmas különbséget, mert a 30 000 sor nem túl nehéz az adatbázis feldolgozásához. Ha azonban több száz millió sorról vagy annál többről beszélne, akkor észrevehető javulást tapasztalna, ha a csatlakozás előtt összesítené. Amikor ezt megteszi, győződjön meg arról, hogy logikailag következetes — e a munkája pontossága miatt aggódnia kell, mielőtt a futási sebesség miatt aggódna.
13 lekérdezési TELJESÍTMÉNYTIPPEK
ne felejtse el előtagozni az objektumneveket (pl. táblázat, tárolt eljárás, nézet) a tulajdonos / séma nevével.
OK: Ha a tulajdonos/séma neve nincs megadva, az SQL Server motorja megpróbálja megtalálni az összes sémában, amíg az objektum meg nem találja. Az SQL Server engine nem keresi a táblát a tulajdonosán/sémán kívül, ha a tulajdonos / séma neve Meg van adva.
A * operátor
ne használja a * operátort a SELECT utasításokban. Ehelyett használjon oszlopneveket.
ok: az SQL Server megkeresi az összes oszlopnevet, és lecseréli a * – ot az SQL SELECT utasítás tábláinak összes oszlopnevére. Az oszlopnevek megadása elkerüli ezt a keresési és csere lehetőséget, és javítja a teljesítményt.
nullázható oszlopok
kerülje a NOT IN használatát, ha összehasonlítja a nullázható oszlopokkal. Használat nem létezik helyette.
OK: Ha a lekérdezésben a NOT IN értéket használja (még akkor is, ha a lekérdezés nem ad vissza sorokat a null értékekkel), az SQL Server ellenőrzi az egyes eredményeket, hogy null-e vagy sem. A NOT EXISTS használata nem fogja összehasonlítani a nullpontokat. Ezenkívül a not EXISTS csak két állapotot ad vissza (Igaz vagy hamis), míg a NOT IN legfeljebb három állapotot adhat vissza (Igaz, hamis, NULL), és előfordulhat, hogy nem adja meg a várt eredményt.
Táblázatváltozók és illesztések
kerülje a táblázatváltozók használatát az illesztésekben. Ehelyett használjon ideiglenes táblákat, CTE-ket (közös Táblázatkifejezéseket) vagy származtatott táblákat az illesztésekben.
ok: annak ellenére, hogy a táblázatváltozók sok helyzetben nagyon gyorsak és hatékonyak, az SQL Server motor egyetlen sornak tekinti. Emiatt az SQL olyan végrehajtási tervet készít, amely szörnyen teljesít, ha az illesztésekben használják.
tárolt Eljárásnevek
ne kezdje el a tárolt eljárás nevét az sp_ paranccsal.
ok: ha a tárolt eljárás neve sp_ vagy SP_, az SQL Server mindig ellenőrzi a rendszer/fő adatbázist, még akkor is, ha a tulajdonos/séma neve Meg van adva. Az sp_ nélküli név megadása egy tárolt eljáráshoz elkerüli ezt a felesleges ellenőrzést az SQL Server rendszer/fő adatbázisában.
a set NOCOUNT használata
a SET NOCOUNT használata DML műveletekkel.
ok: DML műveletek (pl. Beszúrás, törlés, kijelölés és frissítés), az SQL Server mindig visszaadja az érintett sorok számát. Összetett lekérdezésekben, sok csatlakozással, ez hatalmas teljesítményproblémává válik. A SET NOCOUNT ON használata javítja a teljesítményt, mert nem fogja nyomon követni az érintett sorok számát.
kerülje a GROUP BY, ORDER BY és DISTINCT használatát
kerülje a GROUP BY, ORDER BY és DISTINCT használatát, amikor csak lehetséges.
ok: a GROUP BY, ORDER BY vagy DISTINCT használatakor az SQL Server motor létrehoz egy munkaasztalt, és az adatokat a munkaasztalra helyezi. Ezt követően ezeket az adatokat a lekérdezés által kért munkaasztalba rendezi, majd visszaadja a végeredményt.
indexek ellenőrzése
az SQL utasítás WHERE and JOIN részében használt összes mezőn indexeknek kell lenniük.
ok: ha a mezők nincsenek indexelve, az SQL Server általában teljes táblázatos vizsgálatot végez, ami csökkentheti a teljesítményt. Hacsak a táblázat nem nagyon kicsi, a táblázatvizsgálat általában a legrosszabb teljesítményt nyújtja az összes típusú adatbázisolvasás közül.
használja ugyanazt az adattípust a JOIN and WHERE Záradékoknál
ezt könnyebb mondani, mint megtenni a séma módosításának engedélyeitől függően.
ok: két mező különböző adattípusokkal való összekapcsolásakor vagy összehasonlításakor az SQL-nek az összehasonlítás elvégzése előtt el kell végeznie a mező on-the-fly átalakítását, még akkor is, ha a mezők indexelve vannak. Ha a nem egyező adattípusok elkerülhetetlenek, próbálja meg a nagyobb adattípust a kisebb adattípusra önteni, amikor csak lehetséges.
kerülje a számított mezők használatát a JOIN-ban, és ahol a
záradékok ezt úgy teheti meg, hogy létrehoz egy mezőt az illesztésben használt számított értékekkel a táblázatban. Lásd alább.