Hi!
Lenne néhány sebességkérdésem viszonylag nagyterheltségű rendszerekhez. Inkább a belső működésre vonatkoznak, de remélem tud valaki valamit mondani.
A) Van egy sok millió soros tábla, amiből szeretnék mondjuk 100 sort kiválasztani.
1)
s elect * from table where id > 100 and id < 201
2)
s elect * from table where id = 101 ;
s elect * from table where id = 102;
...
...
...
s elect * from table where id = 200
Feltételezem az első megoldás sokkal gyorsabb, de mennyi a különbség, ha mondjuk ugyanazt a 100 sort nem egy, hanem 100 különálló s electtel kérdezem le? Nagyságrendbeli, vagy 2- es szorzó alatti?
A többit majd később.
Köszi.
- 833 megtekintés
Hozzászólások
esetleg ha megmerned? :D a te tablad :]
---
Apple iMac 20"
áéíóöőúüű
- A hozzászóláshoz be kell jelentkezni
+1
De ha id indexelt, akkor egy sor kikeresése O(n logn), majd utána ha inkább a BETWEEN kulcsszót használnád O(1) lépésben kiválasztja a keresett sorokat. Ha a lekérdezésoptimalizáló nem csinál ebből BETWEEN -t akkor kicsit nagyobb az overhead.
Ezzel szemben a második megoldás O(m*n logn) -el fog működni.
Ha id nem indexelt akkor az első megoldás O(n), a második O(n*m).
Ráadásul a második megoldás még m-szer igényli az SQL utasítás parsolását, optimalizálásást, végrehajtását, míg az első csak egyszer.
(n a sorok száma, m a keresett sorok száma)
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni