Hej Om du skall ha alla, kan du gott skriva *. Men gör det inte av ren lathet om du har en tabell med många fält, men bara skall ha ett par stycken av dem. Tack Per då vet jag! Hej, Jag hörde samma sak på en konferens i Amsterdam. Detta gällde då VB6 och ADO, och troligen stämmer det fortfarande, men jag tror inte skillnaden är lika stor idag. Jag inbillar mig att implementationen är bättre nuförtiden. >Sedan vet jag inte om detta är sant eller falskt, men när man ger fältets index i sql-satsen eller i tabellen så ger det >bättre prestanda istället när man skriver mittFält i ex. en DataReader (minDataReader["mittfält"]) En MYCKET intressant grej är att kolumnerna inte kommer i rätt ordning om man skriver *. Det finns flera poänger med att inte använda "select *".fråga om astrix (* )
har en fråga:
Benny Svensson skrev så här i ett annat inlägg:
"Först en rekommendation, skriv inte astrix (* ).
Det är bättre att specifisera de fält som du vill använda dig av.
Det tar mindre prestanda ifrån servern, som då slipper att leta efter vad som finns i tabellen."
Har funderat lite på det. Om man skall ha ALLA posterna som finns i en databas, skall man i allafall skriva "tabellen.fornamn, tabellen.efternamn" osv... eller kan man då skriva * ??
//bara nyfikenSv: fråga om astrix (* )
För övrigt heter det "asterisk".Sv:fråga om astrix (* )
(jag kopierade "astrix (*)" direkt av Benni Svenssons inlägg ;-)Sv: fråga om astrix (* )
Sedan vet jag inte om detta är sant eller falskt, men när man ger fältets index i sql-satsen eller i tabellen så ger det bättre prestanda istället när man skriver mittFält i ex. en DataReader (minDataReader["mittfält"])
Är det sant eller falskt?
/mSv:fråga om astrix (* )
Sen kan man ju ha en hel del synpunkter på det vettiga i att skriva så, hårdkodade siffror för kolumnerna är ju ingen höjdare. Skulle någon skriva om SQL-satsen eller SP:n (ändra ordningen på fälten) så kan det ju bli hejdlöst fel. Sv:fråga om astrix (* )
Skillnaden är obetydlig. Tiden det tar att hämta data från databasen är många gånger större än tiden det tar att leta upp ett fältnamn. Att använda index är en suboptimering som bara gör koden svårare att underhålla.
Jag har tagit för vana att köra en profiler på mina applikationer för att se var tiden spenderas. I nästan samtliga fall så är det bara några få % som spenderas i den kod jag skrivit. Även om index är något snabbare än sträng så märks det inte i slutändan.
Kan inte påstå att jag sett någon större skillnad mellan att använda * mot att ange fältnamnen men jag sällan särskilt många fält i mina tabeller. Det är vikigare att se till att begränsa antalet rader i resultatet av sql-satsen.Sv: fråga om astrix (* )
Om klienten anropar med (t.ex.) Fields(2), så kan man få väldigt roliga fel.
Jag jämför nu OLEDB för SQL Server 2000 och OLEDB för Access. Klienten är Query Analyzer för SQL 2000
Select * from SQL Server ger kolumnerna i den ordning de skapats(eller modifierats) i SQL Server.
Select * from Access ger kolumnerna i bokstavsordning.
Kolumnlista specificerad ger ALLTID rätt = samma ordning
/mickeSv: fråga om astrix (* )
:: Även om du just nu hämtar alla fält som finns i tabellen, så kanske du lägger till fält i tabellen i framtiden, och då kommer du att hämta de fälten i onödan. Oftast märks knappt detta extrajobb, men å andra sidan så är det enklaste sättet att optimera kod att se till att man inte gör en massa saker i onödan.
:: Om fälten står i frågan så behöver man inte titta efter i databasen för att se vilka fält som kommer att hämtas av frågan. Koden blir mer självdokumenterande.
:: Ifall du plockar bort eller döper om något fält i tabellen utan att ändra koden, så kommer du att få ett felmeddelandet direkt när du kör frågan, istället för när du försöker läsa ut datat ur recordsetet. Ifall fältet dessutom bara användes ibland, så kommer du att få ett fel som bara uppträder ibland, vilket inte är det lättaste att felsöka.