SQL-kyselyn suorituskyky
tässä nimenomaisessa tapauksessa et huomaa valtavaa eroa, koska 30 000 riviä ei ole liian vaikea tietokannan käsittelyyn. Kuitenkin, jos puhuit satoja miljoonia rivejä tai enemmän, näet huomattavaa parannusta aggregoimalla ennen liittymistä. Kun teet tämän, varmista, että mitä olet tekemässä on loogisesti johdonmukainen — sinun pitäisi huolehtia tarkkuutta työsi ennen murehtia ajaa nopeus.
13 kyselyn SUORITUSVINKIT
muista etuliite objektien nimet (ts. taulukko, tallennettu menettely, näkymä)omistaja / skeema nimi.
syy: Jos omistajan/skeeman nimeä ei anneta, SQL Serverin Moottori yrittää löytää sen kaikista skeemista, kunnes objekti löytää sen. SQL Server engine ei etsi taulukkoa sen omistajan / skeeman ulkopuolelta, jos omistajan / skeeman nimi on annettu.
* operaattori
Älä käytä * operaattoria valituissa lauseissa. Käytä sen sijaan sarakenimiä.
Reason: SQL Server skannaa kaikki sarakkeiden nimet ja korvaa*: n kaikilla SQL SELECT-lausekkeen taulukon(taulukoiden) sarakkeiden nimillä. Sarakkeen nimiä tarjoamalla vältetään tämä haku-ja-korvaa ja parannetaan suorituskykyä.
Nollattavat sarakkeet
Vältä käyttämästä NOT IN-sarakkeita verrattaessa nollattaviin sarakkeisiin. Käyttöä ei sen sijaan ole olemassa.
Reason: kun kyselyssä käytetään NOT IN-koodia (vaikka kysely ei palaisikaan rivejä null-arvoilla), SQL Server tarkistaa jokaisen tuloksen nähdäkseen, onko se null vai ei. Käyttämällä NOT EXISTES ei tee vertailua nulls. Myös, ei ole olemassa palauttaa vain kaksi valtiota (true tai false), kun taas ei voi palauttaa jopa kolme valtiota (true, false, NULL) ja ehkä ei anna sinulle tuloksen odotit.
taulukon muuttujat ja liitokset
Vältä taulukon muuttujien käyttöä liitoksissa. Käytä liitoksissa sen sijaan väliaikaisia taulukoita, Ctes: iä (Common Table Expressions) tai johdettuja taulukoita.
syy: vaikka taulukon muuttujat ovat monissa tilanteissa hyvin nopeita ja tehokkaita, SQL Server-Moottori näkee sen yhtenä rivinä. Tästä syystä SQL tuottaa suoritussuunnitelman, joka toimii hirvittävästi, kun sitä käytetään liitoksissa.
tallennetut Toimenpidenimet
älä aloita tallennetun toimenpiteen nimeä sp_: llä.
syy: kun tallennetun menettelyn nimi on sp_ tai SP_, SQL Server tarkistaa järjestelmän/kantatietokannan aina, vaikka omistajan/skeeman nimi olisi annettu. Antamalla nimi ilman SP_ tallennetulle menettelylle vältetään tämä tarpeeton tarkistus SQL Serverin järjestelmässä/päätietokannassa.
käytä SET NOCOUNT ON
käytä SET NOCOUNT on DML operations.
syy: DML-operaatioita suoritettaessa (ts. Lisää, poista, valitse ja päivitä), SQL Server Palauttaa aina kyseisten rivien määrän. Monimutkaisissa kyselyissä, joissa on paljon liittymiä, tästä tulee valtava suorituskykykysymys. Käyttämällä SET NOCOUNT ON parantaa suorituskykyä, koska se ei pidä kirjaa rivien määrä vaikuttaa.
Vältä ryhmittäin, JÄRJESTYKSITTÄIN ja erillisinä
Vältä ryhmittäin, JÄRJESTYKSITTÄIN ja erillisinä aina kun mahdollista.
Reason: käytettäessä ryhmä, järjestys tai erillinen, SQL Server-moottori luo työtaulukon ja asettaa TIEDOT työtaulukolle. Sen jälkeen se järjestää nämä tiedot työtaulukkoon kyselyn pyytämällä tavalla, ja palauttaa sitten lopputuloksen.
Check Indexes
there should be indexes on all fields used in the WHERE and JOIN parts of the SQL statement.
syy: kun kenttiä ei ole indeksoitu, SQL Server tekee tyypillisesti täyden taulukon skannauksen, mikä saattaa heikentää suorituskykyä. Ellei taulukko on hyvin pieni, taulukon skannaus pyrkii tuottamaan huonoimman suorituskyvyn kaikista tietokantatyypeistä.
käytä samaa Datatyyppiä liittymisessä ja missä lausekkeet
tämä on helpommin sanottu kuin tehty riippuen oikeuksistasi tehdä muutoksia skeemaan.
syy: yhdistettäessä tai vertailtaessa kahta kenttää eri tietotyypeillä SQL: n on tehtävä kentän lennossa tapahtuva muunnos ennen kuin se voi tehdä vertailun, vaikka kentät olisi indeksoitu. Jos ristiriitaiset tietotyypit ovat väistämättömiä, yritä heittää suurempi datatype pienempään datatype aina kun mahdollista.
Vältä laskettujen kenttien käyttöä JOINISSA ja jos lausekkeet
tämä voidaan tehdä luomalla taulukkoon kenttä, jossa on joinissa käytetyt lasketut arvot. Katso alta.