Snelste MySQL query
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.
Gewijzigd op 01/01/1970 01:00:00 door Zero Dead
ik denk dat het 0,00001 seconde uit maakt.
In een tabel van bijv. 5 MB kan dit ook een hele tijd schelen!
Gewijzigd op 01/01/1970 01:00:00 door Zero Dead
daarnaast hoor je ` te vergeten / niet te gebruiken...
pas vanaf gb tabellen of iig 500mb+ ga je het echt goed merken
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)
Gewijzigd op 01/01/1970 01:00:00 door Zero Dead
to is een reserved geval. Die moet je dus ook niet gebruiken...
http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html
Die hoor je dus uberhaupt niet te gebruiken.
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
ik snap wel wat je bedoeld maar dat was je vraag niet :)
Heb zelf ook
klanten
adsl
adsl_invoice
tarieven
data
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.
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 :).
Quote:
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.@ Eris; maar zolang ik MySQL gebruik vind ik ` net zo netjes, is wat overzichtelijker.
Beschouw die smerige backtics als een stuk afval, dat wil je echt niet in je SQL hebben.
Netje SQL schrijven kun je alsvolgt doen:
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.