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.
ik denk dat het 0,00001 seconde uit maakt.
Niet wanneer je een query hebt die 1 rij tussen de 200,000 rijen moet selecteren...

In een tabel van bijv. 5 MB kan dit ook een hele tijd schelen!
gewoon testen

daarnaast hoor je ` te vergeten / niet te gebruiken...
5mb is niets voor een tabel
pas vanaf gb tabellen of iig 500mb+ ga je het echt goed merken
@ Eris; maar zolang ik MySQL gebruik vind ik ` net zo netjes, is wat overzichtelijker.

En als ik bijv. een query gebruik als:
UPDATE user_messages SET read='1' WHERE to='{$_SESSION['login']}'

Dan loopt hij volgens mij vast zodra hij het woordje 'to' ziet.(heb ik eerder al eens gehad)
to is een reserved geval. Die moet je dus ook niet gebruiken...


@ Wes; een 'groot'/'zwaar' script met veel query's erin(bijv. persoonlijke statistieken of een profiel) kan het behoorlijk lang duren om alle query's uit te voeren.

En om op mijn eigen server te testen heeft ook geen zin, die word continue gebruikt...

Hits per Hour: AVG; 24758 MAX; 57446 Dat is per minuut AVG: 412 MAX: 957 -> per seconde: AVG: 6.87 MAX: 15.96
@zerodead

ik snap wel wat je bedoeld maar dat was je vraag niet :)

Heb zelf ook

klanten
adsl
adsl_invoice
tarieven
data
email

en dan nog 5 databases, waar ik in 1 query een overzicht van moet krijgen รก 5000 stuks, duurd een goede 0,2 seconden , dankzij mn indeling . tkan wel snel maar je moet wel een beetje van de hoed en de rand weten
Als je echt de snelste query wilt, kan je het steeds testen met een functie zoals microtime(). Waarmee je de page-generation-time kan berekenen. Dan kan je de laagste tijd nemen.

Reageren