Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Databaze Mysql 2 milionu zaznamu

Zdravim, predem se omlouvam za diakritiku, nemam ceskou klavesnici.

Chtel bych se zeptat ohledne rychlosti MySql a dalsich databazi.
Mam 2 miliony zaznamu, coz je databaze geolokace podle ip adressy.

Mysql dotaz:
[pre]select * from geoLocation_blocks WHERE INET_ATON('5.5.5.5') BETWEEN startIpNum AND endIpNum LIMIT 1;[/pre]
1 row in set (1.25 sec)

Struktura tabulky
[ startIP (int 10 UNSIGNED) | endIP (int 10 UNSIGNED) | oblast (int 6 UNSIGNED)]

Nejde to jeste zrychlit? :) Nebo po tom chci moc? :P
Popripade bych si nechal doporucit jinou (rychlejsi) databazi. Ale obavam se ze pro tento dotaz uz moc rychlejsi nebude.

Dekuji predem za rady.

Předmět Autor Datum
Z tohodle popisu se to špatně hádá - jednak nevidím exekuční plán, druhak nevím co je startIpNum AND…
AZOR 22.05.2013 22:52
AZOR
startIpNum a endIpNum jsou ipadresy zapsane ciselne. Viz INET_ATON() ktery mi vstupni ip adress vrat…
ManJava 23.05.2013 13:02
ManJava
Index tam nemam zadny, jelikoz mi neprijde ze by se tam vyplatil. LOL&ROFL. ]:) Hlavně že nad tou…
touchwood 23.05.2013 14:27
touchwood
tam nemam zadny, jelikoz mi neprijde ze by se tam vyplatil V tom případě, se jede FULL TABLE SCAN.…
AZOR 23.05.2013 14:57
AZOR
Ja myslel ze Indexy funguji na principu ze se nejpouzivanejsi data zaindexuji a tim pri vyhledavani…
ManJava 23.05.2013 15:40
ManJava
ok, diky.. Asi jsem si spatne vylozil slovo Indexy :)
ManJava 23.05.2013 15:42
ManJava
index je balance-tree struktura, která umožnuje rychle vyhledávat. Má to relaci na to kolik ruznych…
AZOR 23.05.2013 15:45
AZOR
Hledáš nějaký interval IP (start-end), ale výsledek omezíš jen na jeden záznam (LIMIT 1). To jsem ne…
host 22.05.2013 23:46
host
Ano, jelikoz rozsahu v IP adresse odpovida prave jedno konkretni misto. (Oblast)
ManJava 23.05.2013 13:03
ManJava
Kdyby rozsahu odpovídalo jen jedno místo, nemusel bys SELECT omezovat LIMITem. :i: poslední
host 23.05.2013 22:43
host
Vic operacni pameti - vykonnejsí CPU - optimalizovat parametry MySQL. 2mil zaznamu neni zas tak moc.
JR_Ewing 23.05.2013 13:11
JR_Ewing
:-D bože - index, partišnování, indexově orientovaná tabulka, držení tabuky v paměti, ta funkce fakt…
AZOR 23.05.2013 15:23
AZOR
Predpokladam, ze minimalne na StartIP je definovany clusterovany index (doufam, ze mySQL clusterovan…
Jan Fiala 23.05.2013 14:04
Jan Fiala
nemusi byt clustered. To je vacsinou Primary key. Staci ak zadefinuje na obe polia, ktore sluzia ako…
wam_Spider007 23.05.2013 14:23
wam_Spider007
něco mi uniká nebo clusterovany index je v tom mssql co používáš něco jiného než v oracle?
AZOR 23.05.2013 15:03
AZOR
clusterovany index je vsade to iste a teda to, ze podla daneho indexu su aj zaznamy realne zoradene.
wam_Spider007 23.05.2013 15:54
wam_Spider007
Presne tak. A pokud se podle toho pole vetsinou vybira, ma tam ten index smysl - je vykonove rychlej…
Jan Fiala 23.05.2013 15:57
Jan Fiala
Už jsem zagooglil. Pravda je taková, že slovo "cluster" u Oracle je ale je to něco jiného - kombinac…
AZOR 23.05.2013 16:17
AZOR
Ono to nebude od Cluster, ale od clustering, pripadne clustered Ve svete MS SQL je to property index…
Jan Fiala 23.05.2013 18:43
Jan Fiala
Ok, diky - nevěděl jsem právě co to je, tak se ptám. Když tomu říkají v každé DB jinak je to složité…
AZOR 23.05.2013 19:46
AZOR
okrem indexu by jednou z optimalizacii mohlo byt to, ze INET_ACTION('5.5.5.5') nahradis za premennu.…
wam_Spider007 23.05.2013 14:39
wam_Spider007
A nebo INET_ACTION označit jako DETERMINISTIC a databáze si jí v tomhle případě zavola jen jednou. O…
AZOR 23.05.2013 15:16
AZOR

Z tohodle popisu se to špatně hádá - jednak nevidím exekuční plán, druhak nevím co je startIpNum AND endIpNum a jak je to s indexem Je to celá tabulka? Co se dělá za operaci? Partišnovani apod?

Nevim jak to měříš a k čemu to používáš a kolik je tam userů atd. Těžko něco hádat.

startIpNum a endIpNum jsou ipadresy zapsane ciselne. Viz INET_ATON() ktery mi vstupni ip adress vrati jako ciselnou. Index tam nemam zadny, jelikoz mi neprijde ze by se tam vyplatil. Ano je to cela tabulka. Provadim jen ten dotaz co jsem uvedl vyse.

Netusim co znamena Partišnovani :)

Cas mi vyhazuje terminal ve vystupu. Na poctu useru mi nezalezi. Potrebuji predevsim rychlost pro par rychlych dotazu.

Ja myslel ze Indexy funguji na principu ze se nejpouzivanejsi data zaindexuji a tim pri vyhledavani se zrychli dany process. Ale prepokladam ze u vyhledavani IP adress se tak casto stejne data opakovat nebudou.

Nebo Indexy funguji jinak?

index je balance-tree struktura, která umožnuje rychle vyhledávat. Má to relaci na to kolik ruznych hodnot je ve sloupci, kolikrát je tam nully atd. Ale když pominu specialni případy, tak rozhodně nezávisí na tom, která data používáš,ve struktuře jsou indexovány všechny hodnoty mimo prázdných. V 2 milionové tabulce najdeš hodnotu do 2 max 3 ruznych čtení kde se dozvíš, kde je fyzicky řádek uložen +1 do tabulky.

nejpouzivanejsi data zaindexuji

Ne, to skoro vypadá jako, že si pleteš s CACHE, ne není tomu tak, indexuje se všechno co si nadikturuje programátor nezávisle na tom, jak je to pak používáno.

:-D bože - index, partišnování, indexově orientovaná tabulka, držení tabuky v paměti, ta funkce fakt nemusí být volaná tak často - přes proměnou, označení jako deterministic, LOOK UP tabulka v paměti, v oracle bych mluvil o RESULT CACHE atd - asi bžilion možností a ty mu nabídneš koupit novej hardware a optimalizovat celou instantci mysql..

nemusi byt clustered. To je vacsinou Primary key. Staci ak zadefinuje na obe polia, ktore sluzia ako kriterium pre vyhladavanie nejake indexy. Pokial sa vsak v danych poliach dost casto opakuje ta ista hodnota (priklad, polia kde su len priznaky 0 a 1), tak index nema prakticky ziadny ucinok.

Už jsem zagooglil. Pravda je taková, že slovo "cluster" u Oracle je ale je to něco jiného - kombinace jedné (respektive 2, ale i více tabulek), kde na join sloupci jsou společně uloženy v stejnejch blocích. Proto mi to nedávalo smysl, neb dotaz je jen z jedné tabulky.

Co se týče seřazených záznamů, tak rozumím, jen my tomu u Oracle neříkáme clustered (a nevidim důvod, proč by se to tak mělo jmenovat (cluster = svazek)), ale IOT - indexově orientované tabulky,(co googlim není to uplně to samé, ale je to podobné). A v tom případě OK, IOT ano.

Ok, diky - nevěděl jsem právě co to je, tak se ptám. Když tomu říkají v každé DB jinak je to složité.

Pro tento konkretni pripad bych to udelal pouze na prvni sloupec, ne na oba.

Nedokážu bez dat říci, ale souhlasím - zrychlí se to, protože když bere jeden řádek z 2millionu a jsou tam uloženy IP tak index to pošle řádově dolu - vyběr konkrétního se už pak bude pohybovat jen v násobncích času, maximálně (pokud ho vysloveně nepokurví). Naprostý souhlas.

okrem indexu by jednou z optimalizacii mohlo byt to, ze INET_ACTION('5.5.5.5') nahradis za premennu. Teda najprv si do premennej hodis vystup z INET_ACTION('5.5.5.5') a az tu pouzijes do where. Zamedzis tym niekolkonasobnemu volaniu tej istej funkcie.

Zpět do poradny Odpovědět na původní otázku Nahoru