Toon posts:

sql indexeren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik heb een tabel met 9.000.000 emails erin, er is maar 1 kolom en die heet mail, deze heb ik geindexeerd. Als ik nu wil zoeken of een emailadres al aanwezig is doet ie daar echt belachelijk lang over (3 minuten).

Ik heb een andere database met 1,5 miljoen mails ook geindexeerd precies dezelfde structuiur maar daar zoekt ie binne 2 seconden iets op...


Wie kan mij uit de branding helpen?

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

- welk rdbms?
- wat voor index?
- wat is je query?

sorry, gokken is een beetje lastig, m'n glazen bol is kaduuk ;)

Today's subliminal thought is:


Verwijderd

Topicstarter
rdbms was dat?
index hoe bedoel je?
query is select * from

sorry ben nie zo thuis op dit gebied

Verwijderd

welke database..

Verwijderd

/me doet een wilde gok
MS Access?

Verwijderd

Topicstarter
Mysql met php

  • Mawlana
  • Registratie: Juli 2002
  • Nu online
code:
1
select * from

Da's nie zo handig!
MySQL moet dat sterretje zelf invullen wat tijd kost ;) . Je kan beter
code:
1
select mail from
doen :P

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34

TeeDee

CQB 241

zelfde server?

ComputerFreakz: denk dat dat niet veel uitmaakt, als je maar 1 veld in je db hebt? of wel?

De db met 9 milj. mails doet ie 3 mins over
De db met 1.5 milj doet ie 2 sec. over.

Hmm, kan je dan geen problemen hebben met je hardware? Dat die over zijn nek gaat?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
En wat staat er eigenlijk in? Alleen email-adressen of complete emails met headers enzo?

| Toen / Nu


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 26-08 16:09
Ik mag hopen dat dit een grap is?
Je hebt 9M emails en weet niet hoe je een database opzet :?

Anyway.. Stel dat het serieus is.
Splits je emails eens op. Maak 2 tabellen, 1 met:
ID
From
To
Date
Subject

en een ander met
ID
Headers
Text

op die manier kan je op een normale manier op een bepaald email adres zoeken. De database die je nu hebt is compleet nutteloos :\

Verwijderd

Topicstarter
neeeee het gaat alleen om email adressen
dus xxx@xxxx.com en het is maar 1 kolom wara het om gaat

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34

TeeDee

CQB 241

Zoals ik al zei, krijg je geen problemen met je hardware?

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
weet niet ik draai op een dedicated server 256 mb 2*40 gig gemirrored 1,2 GHz, lijtk me goed te moeten gaan

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 26-08 16:09
Oh. Ok.
Hmm, wat is je probleem dan? Selecten op 1 kolom met varchars zou behoorlijk snel moeten gaan, ook met 9M records.

Of ja, wat doe je nou precies?

SELECT * FROM email?
Ik neem aan dat je niet alle email adressen wil krijgen?

BTW kan aan mij liggen maar ik heb het erg sterke vermoeden dan je mensen wil gaan spammen :\

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34

TeeDee

CQB 241

Het zou kunnen zijn dat ie volloopt (lijkt me niet) maar het zou kunnen.

Ik bedoel, 9 milj. records doorzoeken in 1 x vinnik (persoonlijk) vrij stevig.

Hoe ziet je query eruit?

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
f($zoek == "ja") {
$db = mysql_connect("xxxxx", "xxxxxxxxx", "xxxxxxx");
     mysql_select_db("xxx", $db) or die ("nee");
     $sbe = "select * from mailbe where(mail='$email')";
     $vu = mysql_query($sbe);
   if(mysql_num_rows($vu)) {
 echo "gevonden";
}

  • smaij
  • Registratie: November 2000
  • Laatst online: 31-08 23:05
reactie op wasssdat?
rdbms = relational databeest managment software

ontopic:

is de index ook een primary key? zou wel kunnen schelen misschien, weet ik niet zeker
draaien de 2 databases op een identieke server ter vergelijking
wat voor index gebruik je
zijn er eventuele andere relaties in je database?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34

TeeDee

CQB 241

in asp zou ik het zo doen (lijkt me hetzelfde als in php, een sql query :? )

code:
1
"SELECT mail from mailbe where mail = '"&email&"'"


Word de $email gevuld?

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
ja de email geef ik mee in de url...
Ik gebruik phpmyadmin en drukte gewoon op index op die kolom, ik wete niet precies wta je dus bedoelt met "welke index gebruik je"

  • Mawlana
  • Registratie: Juli 2002
  • Nu online
PHP:
1
2
3
4
5
6
7
8
9
10
<?
if($zoek == 'ja') { 
$db = mysql_connect("xxxxx", "xxxxxxxxx", "xxxxxxx"); 
     mysql_select_db("xxx", $db) or die ("nee"); 
     $sbe = "SELECT mail FROM mailbe WHERE(mail='$email') LIMIT 1"; 
     $vu = mysql_query($sbe); 
   if(mysql_num_rows($vu) > 0) { 
 echo 'gevonden'; 
}
?> 

Zo selecteert hij er maar 1!

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
1.5M records a 20-30 bytes is 30-50MB.
9M records a 20-30 bytes is een 200-250MB.
Met 256MB geheugen lijkt me duidelijk wat het probleem is.

| Toen / Nu


Verwijderd

Topicstarter
dus wat is je tip?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:34

TeeDee

CQB 241

meer geheugen?

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
mmm dat zit er denk ff nie in

  • smaij
  • Registratie: November 2000
  • Laatst online: 31-08 23:05
dan wat emailadressen dumpen of een tabelletje ernaast maken en de emailadressen opsplitsen

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Daar zijn wel wat oplossingen voor te bedenken. Wat het handigste is ligt er maar net aan wat je er mee wilt.

| Toen / Nu


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

SuperRembo schreef op 07 oktober 2002 @ 23:56:
1.5M records a 20-30 bytes is 30-50MB.
9M records a 20-30 bytes is een 200-250MB.
Met 256MB geheugen lijkt me duidelijk wat het probleem is.
Ja daaag, en die index ligt daar voor jan met de korte achternaam zeker.
Als er een juiste index ligt en de query is daar op afgestemd (of andersom ;)) dan zal er geen full table scan worden uitgevoerd (tenminste als de resultset klein is t.o.v. de totale table).

@zonietdantochwel:
wat ik bedoelde met rdbms is dus al beantwoord: mysql
welke index, is dus niet echt van toepassing, dus vergeet deze vraag maar.
welke query, oke, dat weten we nu ook.

nieuwe vragen:
- Heb je al een EXPLAIN uitgevoerd om te kijken of de index ook werkelijk gebruikt wordt?
- Heb je de index al een keer geprobeerd opnieuw aan te maken?

Today's subliminal thought is:


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
spam?

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 26-08 16:09
bla

[ Voor 0% gewijzigd door bartvb op 08-10-2002 17:44 . Reden: laat maar. Spam :r ]

Pagina: 1