Autor | Zpráva | ||
---|---|---|---|
Numero1990 Profil |
Zdravím,
za boha se nemůžu ve svých dotazech zbavit using filesort i u primitivních dotazů. Tabulka + indexy CREATE TABLE `buttons` ( `id_button` int(10) unsigned NOT NULL auto_increment, `id_user` int(10) unsigned NOT NULL, `title` varchar(60) collate utf8_czech_ci NOT NULL, `url` text collate utf8_czech_ci NOT NULL, `show` binary(1) NOT NULL default '1', `datetime` datetime NOT NULL, `hide_datetime` datetime default NULL, PRIMARY KEY (`id_button`), KEY `id_user+show+id_button` (`id_user`,`show`,`id_button`), KEY `id_user+show` (`id_user`,`show`) ) Dotaz: SELECT `url` FROM `buttons` WHERE `id_user` = 2 AND `show` = 1 ORDER BY `id_button` ASC LIMIT 7 Explain: id : 1 select_type : SIMPLE table : buttons type : ref possible_keys : id_user+show+id_button,id_user+show key : id_user+show+id_button key_len : 4 ref : const rows : 5 extra : Using where; Using filesort |
||
Kajman Profil |
#2 · Zasláno: 31. 1. 2012, 12:31:06
Mají všechny řádky daného uživatele show=1? Jinak u pěti řádků to může být lepší řešení. Nebo se Vám to zdá pomalé?
Co když budete filtrovat uživatele, co má alespoň desítky tlačítek a ne všechny budou show=1? Bude explain jiný? |
||
Numero1990 Profil |
#3 · Zasláno: 31. 1. 2012, 20:32:51
Zatím tam mám jen testovací data, ale počítám s tím, že jich tam bude tisíce (v jednotkách), až to spustím na ostro.
S takovou databází nemám ještě zkušenost, tak proto nevím, jak moc to zbrzdí db server. K otázce - vybírám pouze ty řádky, kde je show = 1 (to jsou ty aktivní, s show = 0 jsou smazané (chci je ale nechat v DB, abych si mohl dohledat, co jsem kde měnil)). |
||
Kajman Profil |
#4 · Zasláno: 2. 2. 2012, 22:16:18
Nachystejte si v testovacích datech podobně naplněné tabulka, jak očekáváte při úspěšném ostrém provozu. Na pár řádcích nemá cenu dotazy analyzovat, pravděpobodně budou mít později jiné plány.
|
||
Časová prodleva: 11 let
|
0