Forum » Izdelava spletišč » Myslq index ne deluje???
Myslq index ne deluje???
algo ::
Imam bazo...
CREATE TABLE pm (
...
author_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
INDEX (author_id),
INDEX (user_id),
INDEX (author_id, user_id),
PRIMARY KEY (thread_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INDEX (author_id, user_id) - je bolj brezveze
Primer vnosov v tabeli pm...
http://shrani.si/f/H/6r/1v1pZBYu/1.tiff
primer querya --> SELECT COUNT(thread_id) FROM pm WHERE author_id = 2 OR user_id = 2
vendar ko preverim indexe z "EXPLAIN SELECT COUNT(thread_id) FROM pm WHERE author_id = 2 OR user_id = 2" mi išče po vsej tabeli???!! Moral bi pa v konkretnem po samo treh vnosih! Kje je napaka?
CREATE TABLE pm (
...
author_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
INDEX (author_id),
INDEX (user_id),
INDEX (author_id, user_id),
PRIMARY KEY (thread_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INDEX (author_id, user_id) - je bolj brezveze
Primer vnosov v tabeli pm...
http://shrani.si/f/H/6r/1v1pZBYu/1.tiff
primer querya --> SELECT COUNT(thread_id) FROM pm WHERE author_id = 2 OR user_id = 2
vendar ko preverim indexe z "EXPLAIN SELECT COUNT(thread_id) FROM pm WHERE author_id = 2 OR user_id = 2" mi išče po vsej tabeli???!! Moral bi pa v konkretnem po samo treh vnosih! Kje je napaka?
- spremenil: algo ()
technolog ::
To da je MySQL mal defekten na čase ve vsak... :)
Probej tole:
2. Probej tabelo nafilat z vsaj 10K zapisi. Mogoče se zaradi zelo malo zapisov (pod 100) MySQL odloči za table scan.
Probej tole:
SELECT COUNT(thread_id) FROM (SELECT thread_id FROM pm WHERE author_id=2 UNION SELECT thread_id FROM pm WHERE user_id = 2) A
2. Probej tabelo nafilat z vsaj 10K zapisi. Mogoče se zaradi zelo malo zapisov (pod 100) MySQL odloči za table scan.
Zgodovina sprememb…
- spremenil: technolog ()
algo ::
Hvala technolog! Očitno je res fora v tem, da sem imel premalo vnosov ko sem testiral. Zdaj ko sem dodal 15 vnosov pa je začel uporabljati indexe. kr neki
jype ::
algo> kr neki :P
Daleč od tega. Query optimizer, čeprav je ta od MySQL precej lesen, je precej kompleksna naprava, ki se res potrudi optimizirat poizvedbe. Preberi si več o tem, če želiš vedeti, zakaj se ti je to zgodilo.
Daleč od tega. Query optimizer, čeprav je ta od MySQL precej lesen, je precej kompleksna naprava, ki se res potrudi optimizirat poizvedbe. Preberi si več o tem, če želiš vedeti, zakaj se ti je to zgodilo.
algo ::
Pa za OR unga dvojnega kompozitnega indexa ne rabiš.
Vem ja, samo sm mal na blef probaval kje je napaka. Sm ga drugače že odstranil.
algo> kr neki :P
Daleč od tega. Query optimizer, čeprav je ta od MySQL precej lesen, je precej kompleksna naprava, ki se res potrudi optimizirat poizvedbe. Preberi si več o tem, če želiš vedeti, zakaj se ti je to zgodilo.
Mogoče bom pa res Al mi olajšaš delo pa mi kar poveš?
Zgodovina sprememb…
- spremenil: algo ()
technolog ::
Pri Mysql-u se mi je enkrat zgodilo, da sem zamenjal:
stolpec IN (3,5,6)
v
stolpec=3 OR stolpec=5 OR stolpec=6
Pa sem zmanjšal execution time iz minute pa pol na sekundo.
stolpec IN (3,5,6)
v
stolpec=3 OR stolpec=5 OR stolpec=6
Pa sem zmanjšal execution time iz minute pa pol na sekundo.
jype ::
algo> Al mi olajšaš delo pa mi kar poveš?
O tem so napisane precej debele knjige, tako da ti težko razložim vse. Če so tabele majhne je ceneje prebrat cel "page" v spomin in se sprehodit skozi seznam vrstic kot nalagat v spomin najprej indeks, potem pa še enkrat prebrat dejanske podatke.
O tem so napisane precej debele knjige, tako da ti težko razložim vse. Če so tabele majhne je ceneje prebrat cel "page" v spomin in se sprehodit skozi seznam vrstic kot nalagat v spomin najprej indeks, potem pa še enkrat prebrat dejanske podatke.
WarpedGone ::
Pa sem zmanjšal execution time iz minute pa pol na sekundo.
Ja, zopet QO, ki OR 'pravilom' razbije na unije, kjer gre vsaka pa po indexu.
Operator IN praviloma služi kot filter in index nad poljem ne pomaga nič.
Zbogom in hvala za vse ribe
technolog ::
No, seveda.
Ampak SQL je jezik v katerem ti poveš, kaj bi rad iz baze, ne na kakšen način naj se to naredi. Optimizator ti mora to razbit.
Ampak SQL je jezik v katerem ti poveš, kaj bi rad iz baze, ne na kakšen način naj se to naredi. Optimizator ti mora to razbit.
mn ::
No, seveda.
Ampak SQL je jezik v katerem ti poveš, kaj bi rad iz baze, ne na kakšen način naj se to naredi. Optimizator ti mora to razbit.
TRUE, ampak saj to tudi naredi. Če pa želiš hitro je pa malce bolj komplicirano :)
Drugače pa "query plan"-e VEDNO glejte na čim bolj realnih podatkih! V točno tem primeru je namreč optimizer delal točno tako kot mora! Beri, izbral si je najcenejšo rešitev. Tako ali tako bi moral namreč prebrati z diska celoten blok (vse vrstice) in ker je bila v tem enem bloku cela tabela je ceneje prebrati celotno tabelo s štarta. Je pa optimiziranje querijev mala umetnost.
HardFu ::
eno vprasanje,... zakaj dajete tabelam (nekateri celo poljem, v tem primeru je ok) taksna kripticna imena... kaj za vraga pomeni 'pm'? dajte eno pomenljivo ime, da bodo developerji za vami vedeli kaj ste hotli dosezt
http://codeable.io
WarpedGone ::
Tudi v primeru polja ime PM ni OK. Prebavil bi kak ID, kej druzga pa ne.
Idealno ime je med 4 in 10 znaki, intuitivno in ne-zanikano, če je sestavljeno so deli imena povezani s podčrtajem.
In seveda BREZ krilate golazni :|
Idealno ime je med 4 in 10 znaki, intuitivno in ne-zanikano, če je sestavljeno so deli imena povezani s podčrtajem.
In seveda BREZ krilate golazni :|
Zbogom in hvala za vse ribe
technolog ::
Jaz imam vse verbose, camel case (idGames je recimo tuji ključ tabele games, isDeleted, numPlayers). Uporabljam pa ID za primarni ključ vsake tabele.
algo ::
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Rewrite URLja (apache)Oddelek: Izdelava spletišč | 950 (870) | levaky |
» | SQL seštevanjeOddelek: Izdelava spletišč | 1536 (1320) | pizdarija1 |
» | [php, mysql] sortiranje izpisa iz bazeOddelek: Izdelava spletišč | 2656 (2175) | Binji |
» | SQL select problemčekOddelek: Programiranje | 1075 (945) | darh |
» | te slikice za folderje na forumuOddelek: Programiranje | 1054 (939) | lordgreg |