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.
Hledáš nějaký interval IP (start-end), ale výsledek omezíš jen na jeden záznam (LIMIT 1). To jsem nepochopil.
Ano, jelikoz rozsahu v IP adresse odpovida prave jedno konkretni misto. (Oblast)
Kdyby rozsahu odpovídalo jen jedno místo, nemusel bys SELECT omezovat LIMITem.
Predpokladam, ze minimalne na StartIP je definovany clusterovany index (doufam, ze mySQL clusterovane indexy umi)
něco mi uniká nebo clusterovany index je v tom mssql co používáš něco jiného než v oracle?
clusterovany index je vsade to iste a teda to, ze podla daneho indexu su aj zaznamy realne zoradene.
Presne tak. A pokud se podle toho pole vetsinou vybira, ma tam ten index smysl - je vykonove rychlejsi nez obycejny index.
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.
Ono to nebude od Cluster, ale od clustering, pripadne clustered
Ve svete MS SQL je to property indexu.
Pro tento konkretni pripad bych to udelal pouze na prvni sloupec, ne na oba. A verim, ze rychlost vyberu by se drasticky zrychlila.
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é.
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.