[mySQL] selectie query efficienter opbouwen

Pagina: 1
Acties:

  • Pe7er
  • Registratie: Mei 2002
  • Laatst online: 12-04 12:50
Hoe kan ik de onderstaande SQL query efficienter opbouwen?

SELECT * FROM tabel_adres
WHERE voornaam like 'jan%'
OR achternaam like 'jan%';

ik zoek iets als

SELECT * FROM tabel_adres
WHERE (voornaam OR achternaam) like 'jan%';
of
SELECT * FROM tabel_adres
WHERE 'jan%' in (voornaam achternaam);

maar dan werkend.
Ik wil alle records waar de velden 'voornaam' of 'achternaam' met 'jan' beginnen, selecteren. Nu volstaat de bovenstaande query wel, maar als ik later meerdere velden wil afzoeken wordt het een nogal lange en omslachtig query....

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 18:37
Je query wordt al efficiënter als je ipv 'SELECT *...' 'SELECT fieldname1, fieldname2, ...' doet.

Je hebt volgens mij nog niet echt gezocht trouwens, een zoektocht op Google gaf mij al direct resultaten. Zie o.a. dit topic op DevShed. Even zoeken op Google kan je volgens mij nog meer helpen ;).

Verwijderd

Misschien moet je eens zoeken op sub queries.

  • Pe7er
  • Registratie: Mei 2002
  • Laatst online: 12-04 12:50
cheers! ik bedoelde met efficienter eigenlijk dat ik de code korter wil krijgen. stel dat ik alle velden van alle records in een adresbestand wil selecteren waar voornamen, achternamen, plaatsen beginnen met 'jan', dan doe ik nu

SELECT * FROM tabel_adres
WHERE voornaam like 'jan%'
OR achternaam like 'jan%'
OR plaats like 'jan%';

maar volgens mij kan dat flink korter.... alleen hoe? :?
Dennis schreef op 27 mei 2004 @ 15:06:
Je hebt volgens mij nog niet echt gezocht trouwens
eigenlijk heb ik alleen in de handleiding op www.mysql.com gezocht, maar daar kon ik niets vinden...

  • momania
  • Registratie: Mei 2000
  • Laatst online: 25-05 12:06

momania

iPhone 30! Bam!

Pe7er schreef op 27 mei 2004 @ 15:15:
cheers! ik bedoelde met efficienter eigenlijk dat ik de code korter wil krijgen.
Je moet niet persee je query korter willen maken om de efficientie, dat is nergens voor nodig en vaak levert dat juist alleen maar langzamere queries op. ;)
Queries moeten leesbaarzijn en qua uitvoering efficient, dat is het belangrijkste.

Verder is dit meer iets voor PW :)

Software Algemeen >> Programming & Webscripting

Neem je whisky mee, is het te weinig... *zucht*


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:56
Verwijderd schreef op 27 mei 2004 @ 15:11:
Misschien moet je eens zoeken op sub queries.
1. Subqueries zorgen meestal voor minder efficiente queries
2. MySQL ondersteunt pas vanaf versie xxx subqueries.
Dennis schreef op 27 mei 2004 @ 15:06:
Je query wordt al efficiënter als je ipv 'SELECT *...' 'SELECT fieldname1, fieldname2, ...' doet.
Dat is slechts een kleine optimalisatie, waarvan je het effect nauwelijks zult waarnemen. (Tenzij je die query in een loop zou uitvoeren, maar wie doet dat nu?)


Topicstarter Heb je wel indexen op die velden ? Zonee, leg dan indexen op de velden waarop je zoekt.
Op die manier kan er veel efficienter gezocht worden, en zal er geen table-scan moeten uitgevoerd worden.

edit:
Ik wordt hier bijna gek met die trage k*t verbinding.

[ Voor 51% gewijzigd door whoami op 27-05-2004 15:34 ]

https://fgheysels.github.io/


  • Pe7er
  • Registratie: Mei 2002
  • Laatst online: 12-04 12:50
momania schreef op 27 mei 2004 @ 15:27:
[...]
Je moet niet persee je query korter willen maken om de efficientie, dat is nergens voor nodig en vaak levert dat juist alleen maar langzamere queries op.
[..]
Verder is dit meer iets voor PW :)
Software Algemeen >> Programming & Webscripting
ok thanks allemaal!
ik wilde de code korter schrijven omdat ik anders ontzettend veel code moet gebruiken om alle velden af te zoeken... Door jullie aanwijzingen vond ik http://dev.mysql.com/doc/mysql/en/Fulltext_Search.html (full-text indexing and searching) en denk dat ik dat maar eens ga proberen....
Pagina: 1