Ik ben nu al een tijdje bezig met PHP & MySQL, en zet zoveel mogelijkm dingen in het WHERE-stukje van een query om de selectie zo snel mogelijk te maken.

Maar nu weet ik niet zeker OF dat wel het snelste is.

Voorbeeld:
Tabel users
id int auto_increment PRIMARY
gebruikersnaam varchar UNIQUE
wachtwoord varchar
email varchar
actief enum('0', '1') (<-- is TINYINT beter?)
ToS enum('0', '1') " "
nieuwsbrief enum('0', '1') " "
extra_informatie text

Nu heb ik de volgende query:
UPDATE `users` SET `wachtwoord`='PHPhulp' WHERE `id`='1'

Hoe maak ik die nou het snelste?

Ik heb de volgende keuzes:
1. UPDATE `users` SET `wachtwoord`='PHPhulp' WHERE `id`='1'
2. UPDATE `users` SET `wachtwoord`='PHPhulp' WHERE `actief`='1' AND `tos`='1' AND `nieuwsbrief`='1' AND `id`='1'
3. UPDATE `users` SET `wachtwoord`='PHPhulp' WHERE `nieuwsbrief`='1' AND `tos`='1' AND `actief`='1' AND `id`='1'
4. UPDATE `users` SET `wachtwoord`='PHPhulp' WHERE `id`='1' AMD `nieuwsbrief`='1' AND `tos`='1' AND `actief`='1'

Een 2de query:

UPDATE `users` SET `wachtwoord`='PHPhulp' WHERE `gebruikersnaam`='ZeRoDeaD' (ik weet het id niet)

En de volgende keuzes:
1. UPDATE `users` SET `wachtwoord`='PHPhulp' WHERE `gebruikersnaam`='ZeRoDeaD'
2. UPDATE `users` SET `wachtwoord`='PHPhulp' WHERE `actief`='1' AND `tos`='1' AND `gebruikersnaam`='ZeRoDeaD'
3. UPDATE `users` SET `wachtwoord`='PHPhulp' WHERE `gebruikersnaam`='ZeRoDeaD' AND `tos`='1' AND `actief`='1'

Bij beide query's tellen de volgende regels:
id altijd anders
gebruikersnaam altijd anders
wachtwoord meestal anders
email meestal anders
actief 99/100 keer is het 1
ToS 80/100 keer is het 1
nieuwsbrief 40/100 keer is het 1
extra_informatie optioneel, meestal leeg

-Edit-
Ik denk dat de query die het minste per WHERE 'opdracht' wegstreept het snelste is OF de WHERE-query waar alleen `id`='1' instaat.
slaat nergens op, das leuk voor je output, maar je databasemodel kan je daar niet doorheen gooien
Dat veranderd uiteraard niets aan je databasemodel maar je kan daarmee toch wel weten wat de snelste QUERY is (en dus niet het snelste databasemodel)?
je snelheid ligt meer aan je databasemodel en opmaak dan je query op een zeker punt
Ja, dat weet ik, maar ik dacht dat hij in zijn topicstart vroeg naar de snelste query. Vandaar dat ik die oplossing geef :).
@ Eris; maar zolang ik MySQL gebruik vind ik ` net zo netjes, is wat overzichtelijker.
Er is helemaal niets 'netjes' te vinden aan slecht SQL-gebruik. Je leert verkeerde dingen aan, zoals het gebruik van gereserveerde woorden voor tabel- en kolomnamen.

Beschouw die smerige backtics als een stuk afval, dat wil je echt niet in je SQL hebben.

Netje SQL schrijven kun je alsvolgt doen:

UPDATE
  users
SET 
  wachtwoord = 'PHPhulp' 
WHERE 
  id = 1

Op deze manier springen de tabel- en kolomnamen er ook uit. De waarde 1 is een integer, deze hoort dus eigenlijk niet tussen quotes te staan.

Verder wordt de snelheid van een query voor een belangrijk deel bepaald door de gebruikte indexen.

Reageren