Autor | Zpráva | ||
---|---|---|---|
JanMatoušek Profil |
#1 · Zasláno: 16. 9. 2014, 20:59:04
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 |
#2 · Zasláno: 16. 9. 2014, 21:28:50
Ř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 |
#3 · Zasláno: 16. 9. 2014, 21:44:40
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 |
#4 · Zasláno: 16. 9. 2014, 22:00:30
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 |
#5 · Zasláno: 16. 9. 2014, 22:39:47
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`) (`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. |
||
Časová prodleva: 10 let
|
0