| Autor | Zpráva | ||
|---|---|---|---|
| stoker Profil |
#1 · Zasláno: 25. 7. 2012, 14:01:43
Zdravim,
mam tabulku s nekolika sloupci, ktera obsahuje statisice radku. EXPLAIN SELECT sloupec1 FROM tabulka WHERE (sloupec1 = 123 OR sloupec2 = 123) AND sloupec3='1' AND sloupec4='1' AND sloupec5='1' zobrazi, ze prikaz prosel pri hledani cca 400tis. radku EXPLAIN SELECT sloupec1 FROM tabulka WHERE sloupec1 = 123 AND sloupec3='1' AND sloupec4='1' AND sloupec5='1' nebo EXPLAIN SELECT sloupec1 FROM tabulka WHERE sloupec2 = 123 AND sloupec3='1' AND sloupec4='1' AND sloupec5='1' zobrazi, ze prikaz prosel cca 100 radku. vsechny pouzite sloupce jsou indexovane. Tusite nekdo, jak docilit toho, aby 1. prikaz neprochazel tech radku tolik? diky |
||
| Zechy Profil |
#2 · Zasláno: 26. 7. 2012, 16:18:40
Mám takej pocit, že při zadání SELECTu projede všechny řádky a ty pak porovnává se zadanýma podmínka, je to jako by si v databázi na papíře hledal co potřebuješ dle zadaných podmínek, taky potřebuješ projet všechny data jestli odpovídají zadaným podmínkám.
|
||
| Tori Profil |
#3 · Zasláno: 26. 7. 2012, 16:31:01
stoker:
Na kterých sloupcích jsou indexy? Nepomohl by třeba společný index přes sloupce 3+4+5? |
||
| stoker Profil |
#4 · Zasláno: 26. 7. 2012, 17:43:13
Zechy:
v tom pripade by ale pocty prochazenych radku byly stejne u vsech trech prikazu. sloupce jsou indexovane, podle me vybira jenom ty data, ktere splnuji podminky, ale neni mi jasne, cemu vadi to OR. Tori: indexy jsou na vsech 5ti sloupcich zvlast, zadny spolecny. a co spolecny index 1+2+3+4+5 ? nebylo by to lepsi? |
||
| Tori Profil |
#5 · Zasláno: 26. 7. 2012, 17:55:33
stoker:
Já to brala podle toho, že 3+4+5 spojujete pomocí AND, takže by tam mohl být jeden index (vlastně porovnáváte jakoby concat(col3, col4, col5) = concat('hodnota3', 'hodnota4', 'hodnota5'), kdežto u 1 a 2 může být vyhovující hodnota v kterémkoli z nich, takže mi tam připadají vhodnější samostatné indexy. Ale neříkám to ze skušenosti -> zkuste oboje. :)
|
||
| Tomáš K.. Profil * |
#6 · Zasláno: 28. 7. 2012, 00:38:27
Samostatné indexy jsou nepříliš užitečné, což se i ukauzje. Složený na 3,4,5 pomůže, budou se pak procházet jen záznamy, které splní tyto tři podmínky. Na milionu řádku a náhodně generovaných hodnotách 1-10 ve všech sloupcích už dotaz prochází 1700 řádků, trvá 0.01sec.
Další zrychlení by mohly přinést složené indexy na (1,3,4,5) a (2,3,4,5) a přepsání do tvaru SELECT sloupec1 FROM tabulka WHERE (sloupec2 = 3 AND sloupec3='1' AND sloupec4='1' AND sloupec5='1') OR (sloupec1 = 3 AND sloupec3='1' AND sloupec4='1' AND sloupec5='1'); |
||
|
Časová prodleva: 13 let
|
|||
0