Avatar billede supermand69 Nybegynder
16. juli 2006 - 17:31 Der er 14 kommentarer og
1 løsning

index på felt med ip

Jeg har en table med ip og time, og vil så høre om det vil have nogen effekt at smide et index på ip feltet? Vil det gøre søgehastigheden mindre? For det er jo ikke en rigtig integer
Avatar billede pidgeot Nybegynder
16. juli 2006 - 18:17 #1
Det vil kunne gøre søgehastigheden mindre - fordi den kun skal løbe indekset igennem, og ikke hele tabellen - men hvor ofte søger du lige på en IP? Det hjælper jo intet hvis du blot selecter kolonnen.
Avatar billede supermand69 Nybegynder
16. juli 2006 - 18:36 #2
jeg skal have lavet en slags counter med hit tider så man kan lave statistikker osv

ip varchar(15)
time int(10)

hver gang man går ind på siden tjekker den om den pågældende har været inde idag og hvis ikke laver den en ny række
Avatar billede pidgeot Nybegynder
16. juli 2006 - 18:57 #3
Så skulle du nok kunne lave et indeks på det felt som databasen kan benytte til at søge. Det vil nok også være mest optimalt at have et der, da man jo må gå ud fra det indeks gennemsnitligt vil kunne sortere flest rækker fra.

Overvej evt. at lave to indeks, et på hvert felt - det kan godt blive nyttigt at have et på time når du rent faktisk skal lave de statistikker, uden et indeks skal den jo scanne hele tabellen igennem.
Avatar billede supermand69 Nybegynder
16. juli 2006 - 19:09 #4
som det er nu har jeg et indeks på begge felter (ip, time)

mit spørgsmål gik bare på om det kunne optimere min søgning at have et indeks på ip, da det jo ikke er et rigtigt tal..

det kan jo ikke betale sig at have et indeks på et char eller varchar felt (alt efter hvor mange tegn feltet er på)
Avatar billede pidgeot Nybegynder
16. juli 2006 - 20:07 #5
Der er ingen fordel ved at lave et ekstra indeks udelukkende på IP, jf. http://dev.mysql.com/doc/refman/4.1/en/multiple-column-indexes.html. Det kunne dog godt være en fordel at dele de to op så du får et indeks på ip, og et andet på time.
Avatar billede arne_v Ekspert
16. juli 2006 - 20:12 #6
og lige for at få det slået helt fast: index er nyttige på andre felt typer
end integer inklusive  VARCHAR
Avatar billede morw Nybegynder
16. juli 2006 - 23:39 #7
du kan nemt lave en ip om til en int unsigned og dermed spare plads

mysql> SELECT INET_ATON('209.207.224.40');
        -> 3520061480

SELECT INET_NTOA(3520061480);
        -> '209.207.224.40'

eller via php:

http://dk.php.net/manual/da/function.ip2long.php
Avatar billede supermand69 Nybegynder
17. juli 2006 - 13:49 #8
pidgeot > hov.. jeg mente selvfølgelig ikke en samlet key, men en seperat på hver ;)

morw > det ser jo straks bedre ud ;) jeg ser lige på det
Avatar billede supermand69 Nybegynder
19. juli 2006 - 19:20 #9
hvor stor skal jeg lave feltet med inet_aton??

er int(10) nok?
Avatar billede morw Nybegynder
19. juli 2006 - 19:21 #10
husk at lave den unsigned
Avatar billede supermand69 Nybegynder
19. juli 2006 - 19:28 #11
morw > ok.. int(10) UNSIGNED er nok? :)
Avatar billede supermand69 Nybegynder
19. juli 2006 - 19:29 #12
morw > hov.. det har du jo også allerede skrevet fra start.. sorry ;)
Avatar billede arne_v Ekspert
19. juli 2006 - 19:29 #13
en int er en int

en signed int er op til 2.1 mia.

en unsigned int er op til 4.2 mia.

det tal i parentes betyder "Kaere MySQL hvis du skal vises tallet som tekst og du er
i tvivl om hvor mange pladser du skal saette af til tallet saa brug 10"
Avatar billede supermand69 Nybegynder
19. juli 2006 - 20:39 #14
morw > lav et svar
Avatar billede supermand69 Nybegynder
12. oktober 2006 - 16:59 #15
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester