Autor Zpráva
JanMatoušek
Profil
Ahoj, máme tabulku s 3 mil záznamů a máme celkem problém s rychlostí. Velký problém je v tom, že se filtruje asi 5 možností. Takže je potřeba udělat složitější indexy, kde jsou alespoň 3 z obsažených sloupců.

Což tohle by i fungovalo celkem svižně. Ale problém je, že mi přijde ta MySQL strašně hloupá a místo, aby si vzala index, kde má 3 sloupce, tak si veme index, kde je jen jeden sloupec a jde to příšerně pomalu.

Pokud v dotazu přikážu index, který vím, že je potřeba, tak je to ok. Ale zvětšuje to pak ohromě složitost php scriptu. Nedá se to něčím vyřešit?

Nebo není na tohle nějaká lepší databáze? Začínám mít té MySQL fakt plný zuby. Na malé projekty super. Na dotazy, kde není potřeba hledat nad mnoha sloupci tak také, ale tohle je fakt děs...
joe
Profil
Řekl bych, že jde o moc teoretický dotaz. Ukaž jakou strukturu tabulky máš a jaké na ni jsou indexy a jaké dotazy nad tabulkou voláš (možná jsou v dotazu sloupce v jiném pořadí, než obsahuje index, pak se tedy index nepoužije).
Kajman
Profil
JanMatoušek:
Nebo není na tohle nějaká lepší databáze?

Klidně si to na pár jiných databázích zkuste. Pro porovnání bude nejlepší použít reálná data v té tabulce.
JanMatoušek
Profil
joe:
Bude to asi v tom pořadí, to asi není stejné, jako indexy... Díky za radu.

Bohužel konkrétní příklady ven nemohu posílat.

Ještě bych měl jeden dotaz. Je rozdíl v těchto dotazech, co se týče indexace.

Tabulky:
CREATE TABLE `test` (
  `test2_id` int(11),
  `col2` int(11),
  `col3` int(11),
  `col4` int(11),
  `col5` int(11),
  KEY `test2_id_col2_col3` (`test2_id`,`col2`,`col3`)
) 

CREATE TABLE `test2` (
  `id` int(11),
.
.
 PRIMARY KEY (`id`),
) 

Dotaz1:
SELECT ... FROM test WHERE test2_id = x AND col2 =y AND col3 = z

Dotaz2:
SELECT ... FROM test JOIN test2 ON test.test2_id= test2.id WHERE col2 =y AND col3 = z AND test2.col = cond 

Využije se u obou (reps u druhého) index naplno?
Kajman
Profil
Pokud se více omezí podmínkami na tabulku test, tak by se asi hodil další index s jiným pořadím
(`col2`,`col3`,`test2_id`)
nebo
(`col3`,`col2`,`test2_id`)

Pokud se více omezí podmínkou na test2.col, tak udělat index na něm. V tomto případě se pak současný klíč z test pak může pomoci.

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: