Portál AbcLinuxu, 21. července 2025 10:55


Dotaz: indexy v mysql

30.1.2009 10:29 Hollowman | skóre: 4
indexy v mysql
Přečteno: 329×
Odpovědět | Admin

Chtěl bych se zeptat na vliv úspořádání indexů.

Mám tabulku (2,2 mil záznamů) kde jsou sloupce kraj, orp, obec (INT) pomocí kterých se třídí jakési hlavní vypisování při procházení strukturou. Umístil jsem nad tyto sloupce indexy, čím se výrazně zrychlilo vypisování s ohledem na počet záznamů - úroveň kraj to samozřejmě prohledává nejdéle.

Můj dotaz však směřuje k tomu jestli je výhodnější a rychlejší když přidám index s názve radit nad sloupce kraj, orp, obec nebo když udělám tři indexy. Samostatně každý index na každý z těchto sloupců zvlášť.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

30.1.2009 10:40 cronin | skóre: 49
Rozbalit Rozbalit vše Re: indexy v mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zalezi na okolnostiach. Ukaz nam presny prikaz CREATE TABLE, ktorym je tabulka vytvorena a hlavne nam ukaz presny prikaz SELECT, ktory sa snazis optimalizovat.
30.1.2009 10:42 cronin | skóre: 49
Rozbalit Rozbalit vše Re: indexy v mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Btw, je problem to vyskusat a porovnat obe moznosti? :-(
30.1.2009 10:50 hollowman
Rozbalit Rozbalit vše Re: indexy v mysql

 pripada mi to plus minus dost stejne.. 

SELECT nazev, ulice, obec, psc, orp FROM table WHERE kraj=3  // prvni uroven

SELECT nazev, ulice, obec, psc, orp FROM table WHERE kraj=3 AND orp=58  // druha uroven

SELECT nazev, ulice, obec, psc, orp FROM table WHERE kraj=3 AND orp=58 AND obec=6168  // treti uroven

druha a treti jsou bleskove.. v te prvni je výsledkem dotazu více jak 100 tisíc záznamů až 400 tisíc.

CREATE TABLE `firmy_zaklad` ( `ico` int(8) unsigned zerofill NOT NULL, `heslo` varchar(255) collate utf8_czech_ci NOT NULL, `nazev` varchar(255) collate utf8_czech_ci NOT NULL, `obor` int(11) NOT NULL, `kraj` int(11) NOT NULL, `orp` int(11) NOT NULL, `obec` int(11) NOT NULL, `castobce` varchar(40) collate utf8_czech_ci NOT NULL, `ulice` varchar(255) collate utf8_czech_ci NOT NULL, `psc` int(11) NOT NULL, PRIMARY KEY (`ico`), KEY `kraj` (`kraj`), KEY `orp` (`orp`), KEY `obec` (`obec`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

30.1.2009 11:07 cronin | skóre: 49
Rozbalit Rozbalit vše Re: indexy v mysql
Co su to za urovne? Optimalizujes vsetky tie selekty, alebo len ten posledny z nich? Je ten prvy select skutocne pomaly pri selektovani, alebo pri prenose udajov do aplikacie? Skor by som typoval to druhe, zda sa mi ze nacitava ovela viac udajov ako tie zvysne dva. Btw, su tie selekty skutocne kompletne, alebo pokracuju este dalej nejakymi inymi podmienkami resp. klauzulami ORDER BY?

30.1.2009 11:20 hollowman
Rozbalit Rozbalit vše Re: indexy v mysql

 sorry je tam jeste ORDER BY nazev LIMIT 0,30

vzdy je žádán jen jeden select podle toho v jake je to urovni, napred jdes do urovne kraj, vola se prvni select pak vyberes kliknutim ORP a vola si jiny select a pak ten treti.. 

ten dotaz je stejně dlouhý když ho spustím ve finalni aplikaci i když ho spustím v phpmyadminu, ale to je asi totéž., takže nevím jak bych měl poznat jestli je pomalý již při tom selektování

30.1.2009 13:04 cronin | skóre: 49
Rozbalit Rozbalit vše Re: indexy v mysql
je tam jeste ORDER BY nazev LIMIT 0,30
A to sa Ti zda ako nepodstatny detail? Ten prvy select trva dlho, lebo je potrebne tu hromadu zaznamov zotriedit. Pre prvy select odporucam index(kraj,nazev): podla polozky kraj sa bude vyhladavat, a vsetky najdene polozky budu v indexe usporiadane podla nazvu. Takze databaze staci, ze podla prvej urovne indexu najde spravny kraj a potom preiteruje cez vsetky najdene polozky, pretoze vie, ze ich ma zoradene podla nazvu, kedze su podla nazvu indexovane. Ak teda MySQL ma dostatok inteligencie na taketo pouzitie indexu; ale skor typujem ze ano.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.