Lid |
|
Arnold schreef: de query die je specificeert is niet echt optimaal geschreven. Onderstaande zou al een beter optie zijn:
SELECT contact, name
FROM table1
WHERE LOWER(contact) LIKE '%van%'
ORDER BY id DESC
LIMIT 1
Waarom is dit sneller? Je database hoeft nu niet tweemaal een query uit te voeren, omdat je id waarschijnlijk de pk is, hoeft hij alleen een index probe te doen om te sorteren.
Anderzijds blijft de functie LOWER traag, omdat hierbij niet gebruik kan worden gemaakt van een index alle rijen van de tabel worden nu opgevraagd om het veld contact naar lowercase te veranderen en te controleren. Daarnaast is like ook niet snel.
Ok thanks, maar even voor mijn beeldvorming:
1. met deze query, krijg ik dan alle "Contacts" die de string "van" bevatten?
2. beperkt de LIMIT functie de query niet tot het geven van één enkele waarde?
Misschien moet ik mijn vraag wat duidelijker maken.
Wat ik wil bereiken, is dat een gebruiker een (deel van een) contactnaam ingeeft, en vervolgens de contactnamen te zien krijgt in een lijstje (met de hostname van de PC van de gezochte contactnaam).
Het huidige probleem is dat de database waar deze query op gedraaid wordt, wekelijks een update doet.
Dit systeem voegt echter steeds data toe, maar verwijderd geen gegevens in de tabel.
Resultaat is dat de database:
1. steeds groeit
2. er dubbels in de database terecht komen (bijvoorbeeld contact A heeft een nieuwe pc gekregen, met een nieuwe Hostname, dus hij staat 2x in de database).
Dit database-systeem (een soort van Network Sniffer) is een aangekochte applicatie van mijn werkgever, en we kunnen er niks aan wijzigen.
De leverancier is met een nieuwe versie bezig waar de database ook een TRUNCATE functie zal bevatten om de dubbels te verwijderen, maar dit kan nog een tijdje duren.
Tot die tijd moet ik met het huidige systeem verder.
Ik hoop dat dit het wat duidelijker maakt.
|