Query * gebruiken of niet!?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas  van de Steeg

Bas van de Steeg

16/01/2012 20:47:39
Quote Anchor link
Eey mensen,

Ik heb de volgende vraag over het gebruik van * in een query.
Want de een zegt dat het niet moet gebruiken de ander weer wel.
Maar is hier een regel voor of iets? Want het werkt allebij. Heeft dit te maken met de grote va een tabel? Een vriend van mij die bij TNT express werkt zegt namelijk "Het gebruik van een * is beter omdat dit makkelijk is voor testen en je de query niet steeds hoeft te veranderen". Nu zou ik graag jullie mening hierover willen hebben.

Oh die vriend die zorgt dat alles daar met databases goed gaat.
Gewijzigd op 17/01/2012 16:23:59 door Bas van de Steeg
 
PHP hulp

PHP hulp

24/11/2024 11:12:44
 
- Ariën  -
Beheerder

- Ariën -

16/01/2012 20:53:41
Quote Anchor link
met * selecteer je alles.

Stel als je een iets in de 26-delige encyclopedie wilt opzoeken. Haal je dan ook alle 26 boeken uit de kast om vervolgens de juiste uit de stapel te halen? Of alleen de boeken die je nodig hebt?

met een * selecteer je dus alles, dus ga zelf eens na of je ook werkelijk alles wat je ophaalt gaat gebruiken. In de meeste gevallen is dit namelijk niet zo, en zit je een hoop onnodig geheugen weg te vreten op de server.

Daarom: specificeer gewoon alles velden die je gebruikt.
Gewijzigd op 16/01/2012 20:54:26 door - Ariën -
 
Aad B

Aad B

16/01/2012 21:47:10
Quote Anchor link
Het gebruik van SELECT * heeft qua geheugenresources niet zoveel impact wanneer je weinig of slechts één record ophaalt. Het gebruik van SELECT * wordt met name afgeraden omdat je bij een aanpassing van een tabel (een veld erbij of eraf) met SELECT * al je scripts aan moet passen omdat er dan een veld teveel of te weinig meekomt met SELECT *. Dat extra veld heb je misschien maar in 1 script nodig....
 
Wouter J

Wouter J

16/01/2012 22:13:02
Quote Anchor link
Het probleem van * is dat het alles selecteert. Maar wanneer heb je nou een gebruiker id nodig?

En daarnaast zorgt het ook totaal niet voor overzicht. Als je in je query aangeeft welke velden je selecteert weet een ieder die je die code geeft welke velden hij kan gebruiken in PHP. Doe je dit niet, moeten die andere mensen eerst de tabel opzoeken en vervolgens kijken welke rijen het allemaal bevat, hoe deze heten en dan begrijpt hij je code pas.
 
Pieter Jansen

Pieter Jansen

17/01/2012 03:19:36
Quote Anchor link
@Wouter, dat is natuurlijk een non-argument maar doet verder niets af van je verhaal. De wildcard is slecht. Punt. Het is wel degelijk resource intensief als een tabel meerdere velden heeft. Als jij een SELECT doet op nieuws artikelen bijv:

SELECT * FROM nieuws LIMIT 200, 1700

Dan gaat de database vrolijk voor je aan de slag, maar als jij van al die nieuwsartikelen alleen een ID en een titel nodig hebt, kun je de high density velden waar de content van je artikel in slaat, gewoon overslaan. Dus in plaats van 2^12 bits aan gegevens doorlezen hoeft ie misschien maar 2^6 bits door te gaan.

Daarnaast is de groei exponentieel. Stagnatie treedt al snel op bij zulke queries als die van het nieuws voorbeeldje.

Overigens mag je die wildcard gerust gebruiken hoor, niemand die het je zal verbieden, ik ook niet. Sterker, gebruik hem zelf ook altijd, maar ik weet wel wanneer ik velden moet gaan selecteren en wanneer ik er met een wildcard vanaf kan komen. Maar voor een betere en soepeler werking van je app zou ik het niet te veel gaan gebruiken, zeker niet op tabellen waar veel velden in staan ( die je niet altijd nodig bent ).
 
Bas  van de Steeg

Bas van de Steeg

17/01/2012 06:50:59
Quote Anchor link
Ik had het verkeerd begrepen : die vriend zei alleen een * gebruiken voor testjes en/of als je weet wat je doet.
 
TJVB tvb

TJVB tvb

17/01/2012 09:33:33
Quote Anchor link
Bas van de Steeg op 17/01/2012 06:50:59:
Ik had het verkeerd begrepen : die vriend zei alleen een * gebruiken voor testjes en/of als je weet wat je doet.

En om te voorkomen dat je het daarna ook fout gaat doen gewoon nooit * gebruiken. Jezelf iets makkelijks maar slechts aanleren gaat heel snel. Het weer afleren is lastig
 
Jelle -

Jelle -

17/01/2012 12:21:24
Quote Anchor link
Vroeger selecteerde ik altijd alleen de velden die ik wou
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT name, email FROM users WHERE id = 1


Maar tegenwoordig nu het allemaal objecten zijn haal ik elk veld op
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM users WHERE id = 1


Dat zodat het object gewoon compleet is en aangezien me tabellen niet veel kolommen hebben is de overhead wel te verwaarlozen (objects/classes generen ook veel overhead vergeleken met procedueel programmeren)

Het ID haal ik dus ook op en die heb ik juist veel nodig. Alles staat gelinkt aan de ID's

Ps dit alleen voor me object tabellen zoals users/replies/etc
Gewijzigd op 17/01/2012 12:23:36 door Jelle -
 
Bas  van de Steeg

Bas van de Steeg

17/01/2012 13:32:27
Quote Anchor link
@Iedereen

Bedankt allemaal voor jullie reactie.
Het komt er dus op neer dat het alleen maar extra geheugen kost en je
zelf makkelijker kan weten wat er precies uitgelezen kan worden met een query.
 
Pieter Jansen

Pieter Jansen

17/01/2012 16:17:15
Quote Anchor link
Kortom: ja. Vaak vallen de verschillen te verwaarlozen ( we leven in 2012.. ) dus geheugen is echt zo belangrijk niet meer, maar de wildcard * kan dus wel je snelheid ( responsiveness ) drastisch doen verminderen. Als je kameraad het inderdaad bedoelde om te gebruiken als test middel heeft hij gelijk, dat werkt prima. In je uiteindelijke code zou ik het alleen gaan gebruiken als je weet wat je doet. het wordt over het algemeen afgeraden om de wildcard te gebruiken dus als je dat wel gaat doen, moet je weten wat het betekent, zeker als je veel resultaten wilt gaan ophalen uit grote tabellen.
 
Bas  van de Steeg

Bas van de Steeg

17/01/2012 16:22:29
Quote Anchor link
Ja dat zei hij ookal over de snelheid want bij hem op het werk kan het soms dagen duren als ze * gebruiken. Komt doordat die databases zo belachelijk groot zijn.
Daar merk je het verschil pas goed.
Bedankt voor reactie :)
 
Cor S

Cor S

17/01/2012 16:32:04
Quote Anchor link
Dit is een goede tip,

Ik werk veel met hele grote databases van 3-40 mb en gebruik veel select * ipv select veld, veld from.....

Kijken of dit scheelt.
 
Bas  van de Steeg

Bas van de Steeg

17/01/2012 16:35:27
Quote Anchor link
@Cor
Ik denk toch wel dat die database van TNT express iets groter zijn :P
Maar het scheelt inderdaad wel.
 
Pieter Jansen

Pieter Jansen

17/01/2012 16:37:47
Quote Anchor link
Dat is inderdaad best wat data Cor, voor jou is het inderdaad beter om gewoon velden te selecteren i.p.v. de wildcard. Gelukkig heb je nog geen databases mee gemaakt van 70GB. Probeer het daar maar eens op :)
 
Bas  van de Steeg

Bas van de Steeg

17/01/2012 16:50:56
Quote Anchor link
@Merijn
Jij snapt het!
Want daar is een database ook (wat) duurder dan als wij er een nodig hebben.
Die zijn (Denk 1 mil) als je geluk hebt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.