Autor | Zpráva | ||
---|---|---|---|
it47 Profil |
#1 · Zasláno: 5. 5. 2017, 11:04:30
Ahojte,
mam tabulku, kde su clanky a je tam stlpec, kedy ma clanok byt publikovany. A teraz chcem vypisat 3 najnovsie clanky (podla datum_zaciatok) SELECT m.* FROM magazin m WHERE NOW() >= m.datum_zaciatok ORDER by m.datum_zaciatok DESC LIMIT 3 Index mam vytvoreny na datum_zaciatok. Avsak cez EXPLAIN vidim, ze sa prehladavaju aj tak vsetky riadky. Preco? Ak by som vyhodil podmienku NOW() >= m.datum_zaciatok tak uz sa prehladaju iba 3 riadky, ale zase ono by to vypisalo aj clanky, ktore maju byt zverejnene v buducnosti a to nechceme.
Vopred dakujem velmi pekne za akekolvek rady. it47 |
||
Kajman Profil |
#2 · Zasláno: 5. 5. 2017, 11:10:19
Sloupec je typu date nebo datetime?
|
||
it47 Profil |
#3 · Zasláno: 5. 5. 2017, 11:23:23
Kajman:
datetime jeden clanok sa zverejni o 8:00 rano, dalsi o 11:00 atd. ;-)) |
||
Kajman Profil |
#4 · Zasláno: 5. 5. 2017, 13:42:17
Ukazuje explain použití indexu? A oproti verzi bez where je tam jen rozdíl v explain nebo i v rychlosti? Pokud je to stejně rychlé, tak není co zrychlovat.
Možná je to tak, že podmínce vyhoví téměř všechny řádky tabulky a proto vzhledem k limitu raději použije index pro řazení a od konce testuje, zda řádek vyhoví nebo ne (ale jen do doby, než najde tři vhodné). Někdy se zase index nevyužije, když je v tabulce příliš málo záznamů a režie s indexem by byla náročnější než jednoduché projítí několika řádků. |
||
it47 Profil |
#5 · Zasláno: 6. 5. 2017, 18:06:08
Kajman:
Dakujem pekne za vysvetlenie. Takyto je vysledok EXPLAIN (tabulka ma 1092 riadkov): id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra 1 | SIMPLE | m | range | datum_zaciatok | datum_zaciatok | 5 | NULL | 1091 | Using where bez where je to efektivnejsie, lebo sa prehladavaju iba 3 riadky 1 | SIMPLE | m | index | NULL | datum_zaciatok | 5 | NULL | 3 Tak ako? Myslis, ze ten select sa da napisat efektivnejsie? Vopred dakujem velmi pekne. |
||
Kajman Profil |
#6 · Zasláno: 6. 5. 2017, 20:02:39
Jaký je rozdíl v rychlosti?
|
||
Časová prodleva: 3 dny
|
|||
it47 Profil |
#7 · Zasláno: 9. 5. 2017, 15:52:21
Kajman:
cas je takmer rovnaky, takze asi to bude ok? :) |
||
Časová prodleva: 6 let
|
0