Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 12934|Odpoveď: 2

[Tipy] Niekoľko bežných metód na optimalizáciu SQL dotazov v MySQL

[Kopírovať odkaz]
Zverejnené 4. 8. 2017 16:08:46 | | |
1. Na optimalizáciu dotazu by ste sa mali snažiť vyhnúť úplnému skenovaniu tabuliek a najskôr zvážiť vytvorenie indexu na stĺpcoch, kde a v poradí po.

2. Snažte sa vyhnúť používaniu != alebo <> operátorov v klauzule where, inak engine opustí používanie indexov a vykoná kompletné skenovanie tabuliek.

3. Snažte sa vyhnúť nulovému hodnotovému súdu na poliach v klauzule where, inak engine opustí používanie indexov a vykoná kompletné skenovanie tabuliek, napríklad:
Vyberte id z T, kde num je nul
Môžete nastaviť predvolenú hodnotu 0 na num, uistiť sa, že v stĺpci num v tabuľke nie je žiadna null, a potom sa dotazovať takto:
vyber id z t, kde num=0

4. Mali by ste sa snažiť vyhnúť používaniu OR v klauzule where na pripojenie podmienky, inak to spôsobí, že engine prestane používať indexy a vykoná kompletné skenovanie tabuľky, napríklad:
Vyberte id z T, kde num=10 alebo num=20
Môžete sa dopytovať takto:
Vyberte id z T, kde num=10
Zjednotenie všetkých
Vyberte id z T, kde num=20

5. Nasledujúci dotaz tiež povedie k úplnému skenovaniu tabuľky:
Vyberte id z T, kde sa volá napríklad '%abc%'
Pre zvýšenie efektivity zvážte fulltextové vyhľadávanie.

6.in a not in by sa tiež mali používať opatrne, inak to povedie k úplnému skenovaniu tabuľky, napríklad:
Vyberte id z t, kde num in(1,2,3)
Pre spojité hodnoty nepoužívajte in, ak môžete použiť medzi:
Vyberte id z t, kde num medzi 1 a 3

7. Ak použijete parameter v klauzule where, spôsobí to tiež úplné skenovanie tabuľky. Pretože SQL rieši lokálne premenné iba za behu, ale optimalizátor nemôže odložiť výber prístupových plánov na runtime; Musí byť vybraný pri kompilácii. Ak je však plán prístupu vytvorený pri kompilácii, hodnota premennej je stále neznáma a preto nemôže byť použitá ako vstupná položka na výber indexu. Nasledujúce vyhlásenia budú naskenované v plnom rozsahu:
Vyberte id z t, kde num=@num
Môžete donútiť dotaz použiť index:
Vyberte id z t with(index(index(index name)) kde num=@num

8. Snažte sa vyhnúť vyjadrovaniu polí v klauzule where, čo spôsobí, že engine opustí používanie indexov v prospech úplného skenovania tabuliek. Napríklad:
Vyberte id z T, kde num/2=100
Mali by sa zmeniť na:
Vyberte id z T, kde num=100*2

9. Snažte sa vyhnúť vykonávaniu funkčných operácií na poliach v klauzule where, čo spôsobí, že engine opustí používanie indexov v prospech úplného skenovania tabuliek. Napríklad:
Vyberte id z T, kde substring(meno,1,3)='abc' --ID mena, ktoré začína na abc
Vyberte ID z T, kde datediff(day,createdate,'2005-11-30')=0--'2005-11-30' generované ID
Mali by sa zmeniť na:
Vyberte id od T, kde sa volá napríklad 'abc%'
Vyberte ID z T, kde vytvorené>='2005-11-30' a vytvorené<'2005-12-1'

10. Nevykonávajte funkcie, aritmetické operácie ani iné výrazové operácie naľavo od "=" v klauzule where, inak systém nemusí byť schopný správne použiť index.

11. Pri použití indexového poľa ako podmienky, ak je index zložený index, musí byť prvé pole v indexe použité ako podmienka, aby systém použil daný index, inak sa index nepoužije a poradie polí by malo byť čo najviac v súlade s indexovým poradím.

12. Nepíšte nezmyselné dotazy, napríklad generovanie prázdnej tabuľkovej štruktúry:
Vyberte stĺp1,stĺp2 do #t z T, kde 1=0
Tento typ kódu nevracia žiadnu súbor výsledkov, ale spotrebúva systémové zdroje, preto by sa mal zmeniť na niečo takéto:
Create table #t(...)

13. Často je dobré nahradiť v a existuje:
Vyberte num z A, kde num v (vyberte num z b)
Nahradiť to nasledujúcim výrokom:
Vyberte num z A, kde existuje (vyberte 1 z B, kde num=a.num)

14. Nie všetky indexy sú platné pre dotazy, SQL je založený na dátach v tabuľke na optimalizáciu dotazu, keď má indexový stĺpec veľké množstvo duplicity dát, SQL dotazy nemusia index používať, napríklad tabuľka má pohlavie poľa, samec a žena sú takmer polovicou, potom aj keď je index postavený na pohlaví, nebude hrať úlohu v efektivite dotazov.

15. Čím viac indexov nie je, tým lepšie, index určite môže zlepšiť efektivitu príslušného výberu, ale zároveň znižuje efektivitu vkladania a aktualizácie, pretože index môže byť pri vkladaní alebo aktualizácii znovu zostavovaný, takže spôsob vytvorenia indexu je potrebné starostlivo zvážiť v závislosti od konkrétnej situácie. Najlepšie je mať v tabuľke viac ako 6 indexov, a ak ich je príliš veľa, zvážte, či je potrebné vytvárať indexy na niektorých zriedkavo používaných stĺpcoch.

16. Vyhýbajte sa aktualizáciám zoskupených indexových dátových stĺpcov, pokiaľ je to možné, pretože poradie zoskupených indexových dátových stĺpcov je fyzické poradie ukladania záznamov v tabuľkách, a keď sa hodnota stĺpca zmení, povedie to k úprave poradia celých záznamov tabuľky, čo spotrebuje značné zdroje. Ak vaša aplikácia potrebuje často aktualizovať zhlukované indexové stĺpce, musíte zvážiť, či by ste nemali vytvoriť index ako zhlukovaný index.

17. Snažte sa používať číselné polia a nenavrhovať polia, ktoré obsahujú iba číselné informácie ako znaky, čo zníži výkon dotazov a spojení a zvýši režijné náklady na úložisko. Je to preto, že engine porovnáva každý znak v reťazci jeden po druhom pri spracovaní dotazov a spojení, zatiaľ čo pre číselné typy je potrebné porovnať iba raz.

18. Používajte varchar/nvarchar namiesto char/nchar čo najviac, pretože po prvé, dlhší úložný priestor v poli môže ušetriť miesto, a po druhé, pri dotazoch je efektivita vyhľadávania v relatívne malom poli zjavne vyššia.

19. Nepoužívajte výber * z t, nahraďte "*" konkrétnym zoznamom polí a nevracajte žiadne polia, ktoré nie sú použité.

20. Skúste používať tabuľkové premenné namiesto dočasných tabuliek. Ak tabuľková premenná obsahuje veľké množstvo údajov, všimnite si, že index je veľmi obmedzený (iba primárny kľúčový index).

21. Vyhnite sa častému vytváraniu a mazaniu dočasných tabuliek, aby ste znížili spotrebu systémových tabuliek.

22. Dočasné tabuľky nie sú nepoužiteľné a ich správne použitie môže niektoré rutiny zefektívniť, napríklad keď potrebujete opakovane odkazovať na dátovú sadu vo veľkej alebo často používanej tabuľke. Pre jednorazové udalosti je však najlepšie použiť exportnú tabuľku.

23. Pri vytváraní dočasnej tabuľky, ak je množstvo dát vložených naraz veľké, môžete použiť select into namiesto create table, aby ste predišli zvýšeniu rýchlosti veľkého počtu logov; Ak množstvo dát nie je veľké, aby ste uľahčili zdroje systémovej tabuľky, mali by ste najskôr vytvoriť tabuľku a potom ju vložiť.

24. Ak sa používa dočasná tabuľka, uistite sa, že explicitne vymažete všetky dočasné tabuľky na konci uloženej procedúry, najskôr skrátite tabuľku a potom ju zrušte, aby ste predišli dlhodobému uzamknutiu systémovej tabuľky.

25. Snažte sa kurzor nepoužívať, pretože jeho účinnosť je nízka, ak dáta ovládané kurzorom presahujú 10 000 riadkov, mali by ste zvážiť prepísanie.

26. Riešenia založené na množinách by sa mali hľadať na riešenie problémov pred použitím metód založených na kurzore alebo dočasných tabuliek, ktoré sú často efektívnejšie.

27. Rovnako ako dočasné tabuľky, kurzory nie sú nepoužiteľné. Používanie FAST_FORWARD kurzorov pre malé dátové súbory je často lepšie ako iné metódy spracovania riadok po riadku, najmä ak musíte odkazovať na viacero tabuliek, aby ste získali potrebné dáta. Rutiny, ktoré obsahujú "total" vo výslednej množine, sú zvyčajne rýchlejšie ako tie, ktoré sa vykonávajú kurzorom. Ak to vývojový čas dovolí, možno vyskúšať metódy založené na kurzoroch aj množinách, aby sa zistilo, ktorá funguje lepšie.

28. Nastavte NASTAVIŤ NOCOUNT ON na začiatku všetkých uložených procedúr a spúšťačov a na konci NASTAVIŤ NOCOUNT OFF. Nie je potrebné posielať klientovi DONE_IN_PROC správ po vykonaní každého príkazu uloženej procedúry a spúšťača.

29. Snažte sa vyhnúť vráteniu veľkých dát klientovi, ak je objem dát príliš veľký, zvážte, či je zodpovedajúca požiadavka primeraná.

30. Snažiť sa vyhnúť veľkým transakčným operáciám a zlepšiť schopnosti systémovej súbežnosti.

Skóre

Počet účastníkov1MB+5 prispieť+5 Kolaps dôvod
Malý + 5 + 5 Odmeny programu Banana

Zobraziť všetky hodnotenia





Predchádzajúci:Tipy na vyhľadávanie skupín podľa skupín
Budúci:Uvidíme sa v nedeľu 6. augusta 2017 o 8:30 ráno v Grand Mansion v Ruime
 Prenajímateľ| Zverejnené 4. 8. 2017 16:14:30 |
Princíp optimalizácie: malé tabuľky riadia veľké tabuľky, teda malé dátové súbory riadia veľké dátové súbory.
 Prenajímateľ| Zverejnené 4. 8. 2017 16:22:14 |
Aby sa zlepšila rýchlosť dotazov, rozumne vytvárajte indexy ako
VYBERTE a.goods_name,a.goods_number,a.goods_price,a.goods_track,b.payment,b.confirm_time,b.pay_status,b.id,b.sn,b.ware_house,b.total_amount,b.final_amount,b.cpns_amount ,b.sale_amount,b.cost_amount,'goods_count','pay_status', b.ship_status,b. čas na tvorbu, b. platba, b.order_status,b.pay_time,b.shr_name,b.shr_phone,b.shr_province,b.shr_ Telefón, b.shr_province, b.shr_city, b.shr_area, b.shr_address, B. Poznámka, b.order_from, b.send_time, b.pay_sn, c.spec_info, c.cost_price, D.Company, D.List, d.is_error, e.shop_sn ako goods_sn FROM sh_order_goods ľavý spoj sh_order b na a.order_id=b.id ľavý spoj sh_product c na a.product_id=c.id ľavý spoj sh_send d na a.order_id=d.order_id ľavý spoj sh_goods e na a.goods_ id=e.id PORADIE PODĽA id DESC
Hoci tento typ dátového dotazu môže dosiahnuť funkcie, ak narazí na milióny dátových objemov, spôsobí časové limity, ktoré môžu vážne viesť k kolapsu služby. Princíp je 1000*1000*1000, dá sa predstaviť pomaly, skúste použiť jednu tabuľku na kontrolu dát, sčítajte. Najmä e-commerce je najtabuizovanejšou spoločnou témou.
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com