MainframeSupports
tip uge 31/2001:

Vi har altid fået tudet ørene fulde af, at man ikke måtte benytte SELECT * i sine statiske SQL-kald, men har du nogensinde hørt, at det generelt er en god ide kun at lave SELECT af de kolonner, du har brug for.

DB2 benytter en tre-lags struktur, når et SQL-kald skal udføres. Det første lag er den såkaldte RDS (Relational Data Services), det mellemste lag er Data Manageren (DM) og det sidste lag er Buffer Manageren (BM). BM læser pages fra disk ind i buffer-pool'en. DM læser rækker fra pages i buffer-pool'en, mens RDS behandler kolonner fra rækkerne i DM og danner det resultat, som vores applikationsprogrammer får returneret. Det betyder, at RDS skal lave dobbelt så meget, hvis man laver SELECT af eksempelvis fire kolonner i stedet for to.

Ud fra ovenstående information kan man udlede, at SELECT * generelt er en dårlig ide, uanset om det er statisk eller dynamisk SQL, der er tale om. Konklusionen er derfor, at du kun skal lave SELECT af de kolonner, du har brug for. Lad derfor være med at medtage kolonner, som du regner med at få behov for at benytte i en senere version af dit program. Og når du laver dynamiske SQL-kald og godt ved, at det er kolonne X, Y, og Z, du skal kigge på, så lad være med at skrive SELECT * for nemheds skyld, især hvis tabellen har mange kolonner.

Jeg tror det er svært at efterleve disse simple regler i hverdagen, men der er ingen tvivl om, at DB2 får det bedre af det. Det kedelige er, at det ikke har den store målbare effekt for den enkelte, da det kun er en af de komponenter, der indgår i eksekveringen af en SQL-kald, selv om den ifølge nogle DB2-eksperter er en væsentlig faktor.

Forrige danske tip        Last tip in english        Tip oversigten