Autor Zpráva
koudelacek
Profil *
Zdravím,
v optimalizaci databáze se zatím neorientuju, proto bych Vás chtěl požádat o radu, jak zoptimalizovat a přidat indexy do následující databáze.
Tabulka obsahuje seznam článků, později by jich tam mohlo bý i několik desítek tisíc.

id - category - sub_category - title - date - description - link - image_link - friendly_link - visit
int(7) - varchar(20) - varchar(60) - varchar(300) - datetime - varchar(750) - varchar(300) - varchar(300) - varchar(300) - int(5)

Nejčastěji vypisuji data:
WHERE category=.. a sub_category=.. + image_link != ''
ORDER BY date ( někdy visit ).

Děkuji moc za rady.
Kajman
Profil
Pro category a sub_category se většinou používá id a textový popis je k nalezení v samostaných tabulkách, které jsou takovým číselníkem.

Jinak pro zmíněný dotaz by se asi hodil vícesloupcový index

(category, sub_category, date)

Negativní podmínka na image_link může plánovači zamezit použití tohoto indexu i pro řazení. Nejlepší, když si vyzkoušíte rychlost s přepínačem sql_no_cache a kouknete na explain (ale lepší bude testovat na těmi očekávanými desítkami tisíc záznamů).
koudelacek
Profil *
Díky, zkusím se podívat jak se s tím pracuje..
Chci se ještě zeptat:
- bude to mít nějaký velký vliv, pokud budu mít nastavený index jak jste říkal, ale budu někdy vyhledávat místo date podle visit ?
- je správně nastavený formát varchar ? Nikdy jsem nepoužíval TEXT nebo BLOB a nevím, jestli může být nějaký rozdíl ve výkonu..
- a poslední - má radikální vliv počet záznamů v tabulce ? pokud mám nastaveny ty klíče s datem dle předchozího a dávám vypsat např. posledních 20 článků podle data..? pokud to v tomhle případě nemá velký vliv, můžu se zeptat, čemu se mám vyhnout abych to zbytečně nepřetěžoval ? V DB mám momentálně 2.5 tis. článků a je tam napsáno využití 2.5 Mb - kapacitu mám 1 GB - takže čistě teoreticky by se tam vlezlo kolem 1 mil. záznamů, ale nevím, zda to není příliš..
Na normální stránce pracuji vždy jen s posledními ( dle data ) záznamy, všechny ostatní záznamy se dají zobrazit v archivu, ale nevím, jestli i tak může mít vliv počet článků v tabulce na zobrazení např. 5-ti posledních článků na hlavní stránce..
Kajman
Profil
koudelacek:
bude to mít nějaký velký vliv, pokud budu mít nastavený index jak jste říkal, ale budu někdy vyhledávat místo date podle visit

Na část where se onen index použije, na řazení ne. Pokud budete podle visits často řadit, můžete zkusit udělat ještě jeden obdobný index.

je správně nastavený formát varchar ?

Ne, psal jsem, že je lepší použít integer. Text a blob snad na identifikaci kategorie nemyslíte vážně.

má radikální vliv počet záznamů v tabulce ?

Může mít a nemusí, mrkněte na explain. I když je v tabulce třeba milion záznamů, s využitím indexu může databáze pracovat např jen s 20 řádky. Složitost jednotlivých dotazů se tedy liší a nejde odpovědět obecně.
koudelacek
Profil *
Ten formát varchar jsem myslel jako použití na titulek, description a podobně.
Podívám se na explain, díky za rady.

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: