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
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0