SQL Quiz


Jeg sidder og læser lidt op på SQL ting, og jeg synes ligsom så mange andre, at Microsoft SQL server er et fremragende, gennemført og optimalt værktøj som man bør bruge, hvis ens applikation arbejder med en database.


Jeg er ikke SQL Server expert, så bær over med mig, hvis denne quiz er for nem.


Hvis du har en SQL 2005 database tabel med, lad os sige, 100.000 rækker i, og spørger om følgende:


SET STATISTICS IO ON


IF(SELECT COUNT(*) FROM records WHERE (uniqueValue = 'Daniel')) > 0


PRINT 'count: yes'


IF EXISTS(SELECT * FROM records WHERE (uniqueValue = 'Daniel'))


PRINT 'exists: yes'


Hvad går hurtigtst ?


Jeg sætter en bog eller to på højkant for et korrekt svar :0)

Comments (4)
  1. Mark S. Rasmussen says:

    De kører præcis lige hurtigt. Optimizeren går ind og ændrer din første query så begge internt fungerer som en EXISTS, dvs. de begge blot leder efter første matchende record og derved returnerer true. Af samme grund vil dine IO statistics også være identiske.

    Optimizeren kan naturligvis kun foretage denne ændring ved "> 0" queries da disse netop svarer til EXISTS. Hvis der ikke står > 0, så vil planen ej heller være den samme og resultatet vil således være anderledes – men det er så heller ikke så relevant da queries i så fald ikke længere vil være semantisk identiske 🙂

  2. Garry Trinder says:

    Hej Mark.

    Du er skarp, og korrekt svar.

    Du har også ret i dit "> 0", dog kun hvis der ikke befinder sig et index på kollonen. Hvis der findes et index er de igen lige hurtige, uanset.

    Jeg sender dig en bog :0)

  3. Mark S. Rasmussen says:

    Korrekt 🙂 Så længe vi kan holde os fra scans så vil de performe ens i den henseende. Jeg ser frem til læsestoffet, nu er det vel ikke skønlitterært? 😉

  4. deldy says:

    Det er sikkert PHP for Dummies 🙂

Comments are closed.

Skip to main content