Lihtsad soovitused andmebaasi jõudluse parandamiseks

2021-12-03

1. Uuri päringu plaani

Päringu plaanis on näha, kus SQL server hakkab "valesti" arvutama. Valesti selles mõttes, et ta toetub statistilistele andmetele, mis ei ole enam usaldusväärsed ja seetõttu hindab olukorda valesti ja siis kas planeerib ressurssi liiga palju või liiga vähe. Nt kui SQL server oletab et leitakse 1 kirje, aga tegelikkuses leitakse 10 000, siis see on oluline koht, mida uurida, et miks SQL valesti oletas.

2. Indeksid

Indeksid on enamasti need, mis annavad parima jõudluse, kui need toetavad ilusti päringuid. Kõige paremini aitavad nad WHERE ja JOIN päringute juures, ning mida pisemad nad on seda kiiremad.

3. Kustuta mittekasutatavad indeksid

Mittekasutatavad indeksid - kahjulikud indeksid (bad indexes) mitte ainult ei raiska ketta pinda, vaid ka aeglustavad andmete muutumisega või kustutamisega seotud päringuid. Samas on ka näited, kus ka SELECT päringut võib mittevajalik indeks aeglasemaks muuta.

4. Õiged andmetüübid

Mida täpsemalt välja andmetüüp on defineeritud, seda optimaalsemalt ja kiiremini päring töötab. Nt kui andmeid on maksimaalselt 40 tähemärgi jagu, siis ei ole mõtet väljale reserveerida varchar(4000) vaid piisab varchar(40)-st. Tänu sellele saab SQL paremini planeerida ressursse mida tal on vaja päringu teostamiseks.

5. Operatsioonid (Transactions)

Operatsioonid võimalikult väiksed. Nt kui on vaja kustutada 1 000 000 kirjet. Siis ei ole mõistlik proovida kustutada kõik kirjed ühe korraga vaid nt 5000 kaupa. Sedasi väldime tabeli lukustumist ja samuti logi faili liigset kasvamist.

6. LIKE päring

Kui võimalik siis kasutada LIKE asemel "=" operaatorit. Või kui see ei ole võimalik, siis mitte LIKE '%string%' vaid LIKE 'string%'. Küsimus on selles, et kuipalju antud juhul saab indeksi abil muuta päringu täitmist kiiremaks. Kui "=" ja LIKE 'string%' puhul saab indeks olla abiks, siis LIKE '%string%'  puhul mitte.

7. Päri ainult neid välju mida on vaja

Ehk mitte SELECT * vaid SELECT väli1, väli2 jne. Sellega väldid liigset andmemahtu, ning samuti ei mõjuta tabeli muutumine päringu väljundit. Samuti on sellisel juhul garanteeritud õige väljade järjekord.

8. Kasuta JOIN-e mitte alampäringuid.

Enamasti, mitte alati - erand kinnitab reeglit, suudab SQL genereerida optimaalsema päringu plaani, kui kasutada JOIN-i.