Autor Zpráva
TOmáš
Profil *
Zdravím,
mám databázi, které obsahuje přes 2 miliony řádků a x sloupců. Na webu filtruji počet odpovídajících hodnot v cca 7 sloupcích. Problém je, že filtrace se nikdy nedokončí. Vyzkoušel jsem ALTER TABLE `tabulka` ADD INDEX ( `sloupec` );, ale nic se bohužel nezměnilo. Aplikace pro filtraci je napsaná v NETTE.

Prosím o rady, jak filtraci urychlit.

Děkuji
Kajman
Profil
Filtrování je stejné? Nebo pokaždé naprosto jiné? Jaké jsou výsledné dotazy a jejich explainy?
TOmáš
Profil *
K filtraci složí několik sloupců a filtry se dají kombinovat - je tedy pokaždé jiné (dle zvolené kombinace). Filtrování probíhá v reálném čase. Názvy položek jsou v sloupcích nahrazeny čísly, typ int(11). Výstupem je zobrazení počtu odpovídajících položek.
Explain? Bohužel nerozumím, nejsem programátor.

Předem děkuji
Kajman
Profil
Tak tedy jen obecně, když nemáte nic konkrétního.

Na sloupcích, podle kterých se filtruje, je vhodné udělat indexy. Pokud se často filtruje podle některých sloupců najednou, může to zrychlit společný index nad více sloupci.

Filtraci můžete urychlit také zvýšením výkonu serveru (nákup lepšího hardware, použití více počítačů) či přidělení více zdrojů správnou konfigurací databázového serveru. Také můžete otestovat jiné databáze, zda nebudou zvládat požadavky lépe.
Davex
Profil
TOmáš:
Explain? Bohužel nerozumím, nejsem programátor.
Tohle by mohlo pomoci: http://php.vrana.cz/ukazka-pouziti-indexu.php.
TOmáš
Profil *
Kajman:
Indexy máme udělané. Společný index nad více sloupci? Pokud udělám indexaci jednoho a vyzkouším filtraci pouze u něj, tak se nic nezmění. Má společná indexace vliv na rychlost i když filtruji pouze jeden?

Aktuálně běžíme na neomezeném (ale sdíleném) hostingu a nejspíš budeme přecházet na VPS. Proto se snažím dohledat problém, ať nedělám ukvapené závěry.

Díky za rady
Kajman
Profil
TOmáš:
Má společná indexace vliv na rychlost i když filtruji pouze jeden?

Ne. Index nad jedním sloupcem bude podobně rychlý jako v případě, že index bude nad více sloupci a daný sloupec bude uveden při vytváření indexu na prvním místě.

Pokud udělám indexaci jednoho a vyzkouším filtraci pouze u něj, tak se nic nezmění.

Ani zmíněné explainy se nezmění? Zkontrolujte si v nich, zda se indexy používají. A zkuste si to i na jiném serveru - je možné, že je ten současný jen špatně nastavený.

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: