Zvýšte výkon SQL dotazov pomocou MSSQL. V tejto informatívnej príručke sa dozviete, ako optimalizovať svoje dopyty na efektívnosť a rýchlosť.

Neoptimalizované dotazy SQL servera Microsoft SQL Server (MSSQL) môžu viesť k podpriemernému výkonu, nadmernému využívaniu zdrojov, nekonzistentným údajom, bezpečnostným chybám a problémom s údržbou. Tieto problémy môžu ovplyvniť funkčnosť, spoľahlivosť a bezpečnosť vášho programu, čo môže frustrovať používateľov a stáť viac peňazí.

Optimalizácia SQL dotazov v MSSQL je rozhodujúca pre dosiahnutie efektívneho a rýchleho výkonu. Používatelia môžu implementovať techniky, ako je indexovanie, zjednodušenie dotazov a procedúry ukladania vyváženie výkonu dotazov a výkonu modifikácie údajov, čo v konečnom dôsledku zlepšuje celkovú databázu výkon.

Optimalizácia dopytov prostredníctvom indexovania

Indexovanie databázy organizuje a triedi údaje v databázových tabuľkách, aby bolo vyhľadávanie rýchlejšie a efektívnejšie. Indexovanie vytvára kópie údajov v tabuľkách a triedi ich tak databázový stroj sa v nich dá ľahko orientovať.

instagram viewer

Pri vykonávaní dotazu databázový stroj používa index na nájdenie požadovaných údajov a rýchlo vráti výsledky, čím urýchli čas vykonania dotazu. Bez indexovania musí databázový stroj prehľadať všetky riadky v tabuľke, aby našiel požadované údaje, čo môže byť náročné na čas a zdroje, najmä pri veľkých tabuľkách.

Vytvorenie indexu v MSSQL

Vytvorenie indexu v relačných databázach je jednoduché a nemožno prehliadnuť ani MSSQL. Môžete použiť VYTVORIŤ INDEX príkaz na vytvorenie indexu v MSSQL.

VYTVORIŤINDEX index_name
ON názov_tabuľky (stĺpec1, stĺpec2, ...);

Vo vyššie uvedenom kóde SQL index_name je názov indexu, názov_tabuľky je názov tabuľky a stĺpec1, stĺpec2a tak ďalej sú názvy stĺpcov, ktoré sa majú indexovať.

Tu je postup, ako vytvoriť index bez klastrov na a zákazníkov tabuľky Priezvisko stĺpec s príkazom SQL.

VYTVORIŤ NEZAHRNUTÝ INDEX IX_Customers_LastName
ON Zákazníci (Priezvisko);

Príkaz vytvorí neklastrovaný index tzv IX_Customers_LastName na Priezvisko stĺpec zákazníkov tabuľky.

Náklady na indexovanie

Aj keď indexovanie môže výrazne zlepšiť výkon dotazov, stojí to za to. Indexovanie vyžaduje ďalší diskový priestor na uloženie indexu a operácie indexovania môžu spomaliť operácie úpravy údajov, ako sú vkladanie, aktualizácie a vymazania. Index musíte aktualizovať pri modifikácii údajov a operácia aktualizácie môže byť pri veľkých tabuľkách časovo náročná.

Preto je nevyhnutné vyvážiť výkon dotazov a výkon modifikácie údajov. Indexy by ste mali vytvárať iba pre stĺpce, ktoré budete často vyhľadávať. Je tiež nevyhnutné pravidelne monitorovať využitie prostriedkov indexu a odstraňovať nepotrebné indexy.

Optimalizácia dopytov prostredníctvom zjednodušenia dopytov

Na analýzu údajov sa hodia zložité dotazy na extrakciu údajov. Komplexné dotazy však majú vplyv na výkon a môžu viesť k neefektívnej extrakcii údajov.

Zjednodušenie dopytov zahŕňa rozdelenie zložitých dopytov na menšie a jednoduchšie pre rýchlejšie spracovanie menej náročné na zdroje.

Zjednodušenie dotazov zvyšuje výkon a uľahčuje extrakciu údajov rozdelením zložitých dotazov na jednoduchšie, pretože zložité dotazy môžu spôsobiť problémy v systéme. Je ťažké im porozumieť, čo sťažuje vývojárom a analytikom riešenie problémov alebo identifikáciu oblastí optimalizácie.

Tu je príklad komplexného dotazu, ktorý beží na MSSQL pre tabuľku zákazníckych objednávok, pričom cieľom je identifikovať trendy a vzory v údajoch:

VYBRAŤ
Meno zákazníka,
COUNT(id_objednavky) AS celkove_objednavky,
AVG(suma_objednávky) AS priemerná_suma_objednávky,
SUM(suma_objednávky) AKO celkový_predaj
OD
objednávky
KDE
order_date BETWEEN '2022-01-01' A '2022-12-31'
AND order_status = 'dokončené'
GROUP BY
Meno zákazníka
MAJÚCE
POČET(ID_objednávky) > 5
ZORADIŤ PODĽA
celkový_predaj DESC;

Dotaz hľadá mená zákazníkov a informácie o predaji z dokončených objednávok v roku 2022 a zároveň filtruje zákazníkov s menej ako piatimi objednávkami podľa celkového predaja v zostupnom poradí.

Dopyt môže poskytnúť cenné informácie, ale je zložitý a jeho spracovanie by nakoniec trvalo dlhšie, najmä ak objednávky tabuľka obsahuje veľa položiek.

Dotaz môžete zjednodušiť rozdelením dotazu na menšie dotazy, ktoré sa vykonávajú jeden po druhom.

-- Získajte zoznam mien zákazníkov a celkový počet objednávok, ktoré zadali
VYBRAŤ
Meno zákazníka,
COUNT(id_objednavky) AS celkove_objednavky
OD
objednávky
KDE
order_date BETWEEN '2022-01-01' A '2022-12-31'
AND order_status = 'dokončené'
GROUP BY
Meno zákazníka
MAJÚCE
POČET(ID_objednávky) > 5;

-- Získajte priemernú sumu objednávky pre každého zákazníka
VYBRAŤ
Meno zákazníka,
AVG(suma_objednávky) AS priemerná_suma_objednávky
OD
objednávky
KDE
order_date BETWEEN '2022-01-01' A '2022-12-31'
AND order_status = 'dokončené'
GROUP BY
Meno zákazníka
MAJÚCE
POČET(ID_objednávky) > 5;

-- Získajte celkový predaj pre každého zákazníka
VYBRAŤ
Meno zákazníka,
SUM(suma_objednávky) AKO celkový_predaj
OD
objednávky
KDE
order_date BETWEEN '2022-01-01' A '2022-12-31'
AND order_status = 'dokončené'
GROUP BY
Meno zákazníka
MAJÚCE
POČET(ID_objednávky) > 5
ZORADIŤ PODĽA
celkový_predaj DESC;

Tento zjednodušený prístup oddeľuje úlohy získavania mien zákazníkov a celkových objednávok, priemerných množstiev objednávok a celkového predaja pre každého zákazníka do jednotlivých dopytov. Každý dotaz má presne určené účely a je optimalizovaný pre konkrétne úlohy, čo uľahčuje spracovanie databázy na požiadanie.

Tipy na zjednodušenie dopytov

Keď zjednodušujete dopyty, je nevyhnutné zamerať sa na jednu úlohu vždy, aby ste vytvorili dopyty, ktoré sú optimalizované pre konkrétnu úlohu. Zameranie sa na jednu úlohu môže výrazne zlepšiť výkon.

Je tiež dôležité používať dobré konvencie pomenovania, aby bol kód ľahšie pochopiteľný a udržiavaný. Môžete ľahko identifikovať potenciálne problémy a oblasti zlepšenia v systéme.

Optimalizácia dotazov prostredníctvom uložených procedúr

Uložené procedúry sú sady vopred napísaných príkazov SQL uložených v databáze. Uložené procedúry môžete použiť na vykonávanie rôznych operácií, od aktualizácie až po vkladanie alebo získavanie údajov z databázy. Uložené procedúry môžu akceptovať parametre. Môžete ich volať z rôznych programovacích jazykov, čo z nich robí výkonný nástroj na vývoj aplikácií.

Tu je príklad vytvorenia uloženej procedúry pre MSSQL, ktorá vráti priemernú mzdu zamestnancov v oddelení:

VYTVORIŤPOSTUP [dbo].[GetAverageSalary]
@DepartmentName VARCHAR(50)
AS
ZAČAŤ
VYBRAŤAVG(plat) ako Priemerná mzda
OD zamestnancov
WHERE Department = @DepartmentName
KONIEC

V uloženej procedúre ste definovali parameter s názvom @Názov oddelenia a použil KDE doložka na filtrovanie výsledkov podľa oddelenia. Tiež ste použili AVG funkciu na výpočet priemernej mzdy zamestnancov v oddelení.

Uložené procedúry v MSSQL môžete spúšťať pomocou EXEC vyhlásenie.

Takto môžete vykonať uloženú procedúru vyššie:

EXEC [dbo].[GetAverageSalary] @DepartmentName = 'Predaj'

V príkaze vykonania uloženej procedúry odošlete príkaz Predaj hodnotu ako názov oddelenia. Výpis vráti priemernú mzdu zamestnanca na obchodnom oddelení.

Ako uložené procedúry zlepšujú výkon dotazov?

Uložené procedúry môžu výrazne zlepšiť výkon dotazov. Po prvé, uložené procedúry znižujú sieťový prenos vykonávaním príkazov SQL na strane servera namiesto prenosu údajov tam a späť medzi klientom a serverom, čím sa zníži množstvo údajov odosielaných cez sieť a zníži sa odozva na dopyt čas.

Po druhé, môžete zostaviť uložené procedúry ukladania do vyrovnávacej pamäte, čo znamená uloženie plánu vykonávania do pamäte. Keď zavoláte uloženú procedúru, server načíta plán vykonávania z pamäte a nie prekompiluje príkazy SQL, čím sa skráti čas vykonania uloženej procedúry a zlepší sa dotaz výkon.

Môžete nastaviť MSSQL na Ubuntu

MSSQL urobilo významný pokrok v podpore Ubuntu a ďalších distribúcií Linuxu. Spoločnosť Microsoft rozpoznala rastúcu popularitu Linuxu v podnikoch a rozhodla sa rozšíriť dostupnosť svojho vlajkového databázového servera na platformy Linux.