Avatar billede Slettet bruger
20. september 2001 - 23:53 Der er 7 kommentarer og
2 løsninger

For høj søgetid

Jeg vil lave en søgefunktion og har derfor testet mysql med en tilfældig database på 10.000 records. Problemet er, at det tager over 2 sekunder at lave en simpel søgning som:

select * from db where field like \'%$text%\' limit 0,20

Det kan da ikke passe at en søgning skal tage 20 sekunder med bare 100k records?
Avatar billede stigc Nybegynder
21. september 2001 - 00:01 #1
det tror jeg er meget rimeligt, for du kan jo ikke indeksere her.
Avatar billede Slettet bruger
21. september 2001 - 00:08 #2
Indeksere?

Er der ikke noget jeg kan gøre for at hjælpe på det?
Avatar billede stigc Nybegynder
21. september 2001 - 00:13 #3
du kan indeksere (sortere) din tabeller efter felter så den hurtigere kan slåes op på disse, men da du laver en like kan det ikke bruges. Det er fordi at like ikke bare sammeligner med starten af en felt, men også skal finde ud om det blot er en del af et felt.

Hvis du havde brugt = kunne en indeksering give dig en kæmpen performance forøgelse.
Avatar billede Slettet bruger
21. september 2001 - 00:24 #4
Ja ok... men hvordan gør andre det så? Fx. søgemaskiner med flere millioner records? Eller det kan måske slet ikke sammenlignes med mysql?
Avatar billede coderdk Praktikant
21. september 2001 - 01:12 #5
Se på:

  http://www.mysql.com/doc/C/R/CREATE_INDEX.html

Der er også noget der hedder FULL TEXT searches - der bruger man FULLTEXT index... Læs om hvordan du laver dem her:

  http://www.mysql.com/doc/F/u/Fulltext_Search.html

=)
Avatar billede coderdk Praktikant
21. september 2001 - 01:15 #6
Jeg kan forøvrigt anbefale PostgreSQL - www.postgresql.org - Den er _meget_ hurtig og _meget_ gratis ;) hehehe
Avatar billede Slettet bruger
21. september 2001 - 01:16 #7
Jeg har fundet en løsning - eller rettere fejlen. I mit script havde jeg nemlig først fundet det totale antal af records, og derefter søgt. Det, at finde det totale antal tog mellem et og to sekunder ved 25k records, mens selve søge-querien kun tog 0,012 sekunder :)
Avatar billede limemedia Nybegynder
21. september 2001 - 04:57 #8
en \"like\" udnytter da ikke indexes ? gør den... mener kun det er fulltext searches der kan anvende indexes. en like bliver nødt til at kigge hver enkelt record for at finde matches... er dog ikke 100 på det...

postgresql skulle være kanon, bedre sql integration og flere muligheder på bekostning af mysql\'s hastighed. det er et valg man må foretage, begge er gratis. :)
Avatar billede limemedia Nybegynder
21. september 2001 - 04:58 #9
netomia >> en select count(id) from tabel tager mellem 1 og 2 sek ???
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