Avatar billede Slettet bruger
20. januar 2005 - 18:34 Der er 10 kommentarer og
1 løsning

Optimering af søgekode

Jeg har en søgekode der går meget langsom, er der nogen af jer der har mod på at hjælpe med at optimere den?

den kan findes her:

http://pastebin.dk/index.php?show=125
Avatar billede alister_crowley Nybegynder
21. januar 2005 - 03:15 #1
Har du hørt om brugen af LIKE statemente i mysql ?
http://dev.mysql.com/doc/mysql/en/String_comparison_functions.html

Det er meget optimalt at bruge til søgning, og så lave 3 OR :)

SELECT * FROM table WHERE seekword='%word' OR seekword='word%' OR seekword = '%word'%
Avatar billede Slettet bruger
21. januar 2005 - 08:21 #2
kunne du give et eksempel på hvordan det kunne virker?

jeg skal jo søge i mange forskellige tabeller.kolonner
Avatar billede Slettet bruger
21. januar 2005 - 08:33 #3
f.eks. i min query:

SELECT
            cykler.id as id,
            maerke.navn as maerke,
            model.navn as model,
            gear.navn as gear,
            gear_position.navn as gear_pos,
            koen.navn as koen,
            cykler.antal_gear as antal_gear
        FROM
            cykler
            JOIN model            ON model.id              = cykler.modelid
            JOIN maerke        ON maerke.id            = model.maerkeid
            JOIN gear            ON gear.id                = cykler.geartypeid
            JOIN gear_position    ON gear_position.id    = gear.positionid
            JOIN c_f            ON c_f.cykelid            = cykler.id
            JOIN cykelhandlere    ON cykelhandlere.id    = c_f.forhandlerid
            JOIN postnr            ON postnr.postnr        = cykelhandlere.postnummer
            JOIN koen            ON koen.id                = cykler.koenid
        WHERE
            cykelhandlere.aktiv='ja'
            AND cykler.antal_gear >= ". $min_antal_gear ."
            AND cykler.antal_gear <= ". $max_antal_gear ."
            AND cykelhandlere.postnummer >= ". $postnr_fra ."
            AND cykelhandlere.postnummer <= ". $postnr_til ."
            AND c_f.pris<=". $pris_til ."
            AND c_f.pris>= ". $pris_fra ."
            ". $mo ."
            ". $ma ."
            ". $gea_t_id ."
            ". $amt ."
            ". $stoe ."
            ". $ge ."
            ". $koe ."
            ". $fo ."
        GROUP BY
            cykler.id
        LIMIT ". $_GET['fra'] .", 20
Avatar billede -xyz- Nybegynder
21. januar 2005 - 09:13 #4
SELECT
            cykler.id as id,
            maerke.navn as maerke,
            model.navn as model,
            gear.navn as gear,
            gear_position.navn as gear_pos,
            koen.navn as koen,
            cykler.antal_gear as antal_gear
        FROM
            cykler
            JOIN model            ON model.id              = cykler.modelid
            JOIN maerke        ON maerke.id            = model.maerkeid
            JOIN gear            ON gear.id                = cykler.geartypeid
            JOIN gear_position    ON gear_position.id    = gear.positionid
            JOIN c_f            ON c_f.cykelid            = cykler.id
            JOIN cykelhandlere    ON cykelhandlere.id    = c_f.forhandlerid
            JOIN postnr            ON postnr.postnr        = cykelhandlere.postnummer
            JOIN koen            ON koen.id                = cykler.koenid
        WHERE
            cykelhandlere.aktiv='ja'
            AND cykler.antal_gear >= ". $min_antal_gear ."
            AND cykler.antal_gear <= ". $max_antal_gear ."
            AND cykelhandlere.postnummer >= ". $postnr_fra ."
            AND cykelhandlere.postnummer <= ". $postnr_til ."
            AND c_f.pris<=". $pris_til ."
            AND c_f.pris>= ". $pris_fra ."
            OR maerke LIKE '%".$SearchString."%'
            ". $mo ."
            ". $ma ."
            ". $gea_t_id ."
            ". $amt ."
            ". $stoe ."
            ". $ge ."
            ". $koe ."
            ". $fo ."
        GROUP BY
            cykler.id
        LIMIT ". $_GET['fra'] .", 20
Well den er ikke testet, men den burde virke så den søger på mærke... du kan jo bare sætte flere likes ind hvis du har lyst...
Avatar billede Slettet bruger
21. januar 2005 - 09:46 #5
Idéen er jo at den skal søge på en masse forskellige kriterier, så alle bliver opfyldt.

Scriptet tager lang tid om at blive gennemløbet, se evt. www.cykeltjek.dk, og det vil jeg gerne have ændret
Avatar billede Slettet bruger
21. januar 2005 - 15:47 #6
querien virker som den skal, den finder præcis de resultater jeg vil have den til at finde!

Mit problem er at den tager 5-6 sekunder om at udføre querien!
Avatar billede alister_crowley Nybegynder
22. januar 2005 - 13:36 #7
Hvorfor er det et problem ;-) Søgning tager tid...

Du kan evt. gøre sådan her:

<Hej vi søger nu efter en side>
<time>
<søgning i sql>
<færdig med at søge, søgningen tog nowtime - <time> sek. >

:)
Avatar billede Slettet bruger
22. januar 2005 - 15:28 #8
Det var en god idé, og det tror jeg at jeg vil gøre.. jeg har fået løst problemet ved at smide alt det gamle væk og lave et helt nyt script.
Avatar billede Slettet bruger
22. januar 2005 - 15:29 #9
smid svar alister, så får du 30 point :P
Avatar billede alister_crowley Nybegynder
22. januar 2005 - 16:21 #10
nej tak, samler ikke på points.
Avatar billede Slettet bruger
22. januar 2005 - 16:22 #11
ok, træls :P
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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