ugrás a tartalomhoz

SQL Query optimalizálás - alapok

kistitan · 2009. Jan. 13. (K), 14.42
Sziasztok!

SQL lekérdezések optimalizálásában szeretnék segítséget kérni.

Tudom, hogy ez rengeteg mindentől függ, amit csak egy konkrét eset ismeretében lehet normálisan megválaszolni, továbbá azt is tudom, hogy tele ven a net jobbnál jobb írásokkal, könyvekkel.

Amit viszont nem találok az olyan alapvető tanácsok, amik teljesen kezdőknek szólnak, akik mondjuk meg tudják már írni a lekérdezéseket, de nem tudják, hogy hogyan, miként érdemes őket tagolni, szerekeszteni, kitalálni, megváltoztatni, ahhoz, hogy ne kapjon szívrohamot az első magára valamit is adó db-s amikor meglátja őket.

Ha lenne bárkinek valamilyen linkje, vagy doksija ezzel kapcsolatban nagyon hálás lennék, de az is segítene ha aki olvassa, leírná szerinte mi az a tíz leggyakoribb hiba, amit kezdő lekérdezők el szoktak követni és a lekérdezés teljesítéményének a rovására megy.
Ha ehhez szükséges mindenképpen megadni,a kkor mondjuk legyen a környezet MSSQL vagy MaxDb, de engem inkább általános dolgok érdekelnének)

Olyasmire gondolok, mint például, hogy két tábla összekapcsolásánál melyiket írjuk elsőnk ha a táblák mérete között jelentős különbség van. És hasonók..
(Nemtudom, hogy ennek ven-e értelme de mintha olvastam volna ilyesmit)

A legkissebb segítségért is hálás lennék!
Még egyszer köszönöm!
 
1

Ld. másik téma

Török Gábor · 2009. Jan. 13. (K), 15.33
Már felvetődött korábban ez a kérdés, érkeztek rá válaszok, ld. MySql datbázis optimalizálás szakirodalmat keresek

Van egy SQL teljesítményfokozás c. témához kapcsolódó könyvem, amiről még nem volt időm a Weblaborra könyvajánlót írni. Szívesen kölcsönadom.
2

off: tetszett?

solkprog · 2009. Jan. 13. (K), 16.23
Ha a közeljövőben nem írsz róla könyvajánlót, akkor elmondanád hogy mennyire tetszett? Illetve mennyire naprakész? (csak mert 2003-as könyvről beszélünk...)
Bár ha ajánlgattad a kérdezőnek akkor annyira rossz biztos nem lehet...
szerkesztve: Az "adatbázis-tervezés" című könyvhöz volt szerencséd? Érdemes az mellé elolvasni?

üdv,
Balázs
3

Megéri elolvasni

Török Gábor · 2009. Jan. 13. (K), 18.59
Mindenféleképpen megéri elolvasni annak, aki SQL-lel sokat foglalkozik. Néhány felvetett probléma bizonyára már nem aktuális vagy nem abban a formában, ahogy azt írták. Ha kistitan nem tart rá igényt, neked is szívesen kölcsön adom.

Az Adatbázis-tervezés-t nem olvastam.
4

kösszi

solkprog · 2009. Jan. 13. (K), 22.17
...a választ, és az ajánlatot. De mivel vidéki vagyok és mivel postával meg nem éri meg oda-vissza küldözgetni, ezért megrendeltem. (egy-két másik "elmaradásommal" egyetemben)

üdv,
Balázs
5

Te tudod

Török Gábor · 2009. Jan. 13. (K), 23.28
mert szerintem olcsóbban jöttél volna ki, ha elküldöm neked postán, és nálad marad, ameddig szeretnéd :)
6

köszönet

kistitan · 2009. Jan. 14. (Sze), 08.13
Köszönöm szépen a javaslatot, tényleg ígéretesnek tűnik. Valószínűleg én is megveszem majd (vagy élek a felajánlott nagylelkű lehetőséggel). Viszont még annyi kérdésem lenne, hogy kevésbé jó, de azért használható egyéb, online dokumentum, vagy néhány saját javaslatotok nem lenne?
Pénteken kellene kiselőadást tartanom a témából, de a fellelhető anyagok hatalmasak és nagyrészt komolyak. Pedig nekem tényleg csak a legalapabb szabályok javaslatokat kellene összegyűjtenem (minden egyes apróság sokat segítene), hogy mire figyeljen egy tapasztalatlan SQL lekérdező, ha a lehetőségeihez képest a legoptimálisabb sebességű lekérdezéseket szeretne írni.

Mégegyszer nagyon köszönöm!
7

Példák

kistitan · 2009. Jan. 14. (Sze), 09.25
Pár dolog amit eddig összeszedtem:

- Indexek használata: táblákhoz amiknél gyakoribb az olvasás, mint a modosítás, lekérdezésekhez, amik a táblázat sorainak legfeljebb kb 20%-át olvassák
- Nézettáblák használata: ?
- in vizsgálat helyett exist vizsgálat
- Ahol lehet a Join hazsnálatának a mellőzése: ?
- Unio/projekció stb műveletek esetén, ha lehet engedjük meg a duplikált sorokat.
- Ha időszakosan ütemezhető, ha az írás/olvasás tegyük az adatot read-only-va, vagy használjuk a NOLOCK-ot.
8

Az én 2 fillérem

zila · 2009. Jan. 14. (Sze), 15.25
Join helyett sokszor gyorsabb a union használata, nézettáblák szerintem nem sokat gyorsítanak kivéve pl. materializált view (mysql-ben nincs ilyen, ha jól tudom) talán annyit számítanak, hogy a view-t előállító queryt nem kell parsolni, plan-t készíteni hozzá stb.

Performancián denormalizálással is lehet segíteni, ha az indokolt, és ezzel durván lehet gyorsítani is persze, cserébe redundáns lesz az adattárolás, és nem lesz olyan szép az adatbázis :)