De site en newsletter van sqlserver magazine:
www.sqlmag.com
Verder kun je veel zelf doen, SQLServer biedt je veel tools die je helpen bij het doorgronden van je queries en waar bottlenecks zitten: query analyzer en de profiler. Op de site van sqlserver magazine kun je artikelen vinden bijvoorbeeld hoe deze tools te gebruiken om je queries te analyseren en te verbeteren. het forum aldaar is ook erg goed, er zitten veel mensen die wetenwaarover ze praten.
Query optimalisatie is niet 1 2 3 in een boek te gieten. Er zijn een aantal standaard dingen waar iedere query wel aan moet voldoen wil hij snel zijn, maar de specifieke dingen die in een bepaalde situatie veel performance schelen zijn zo afhankelijk van de situatie en de gebruikte methode van dataretrieval/manipulatie (je kunt nl. op meerdere manieren met je data omgaan...) dat een boek wel een situatie kan schetsen dat snel is, maar dat het voor jouw situatie niet van belang is.
Het is verder efficienter om goede SQL technieken aan te leren dan op low level niveau een paar cycles te winnen. Een goed voorbeeld hiervan is:
http://groups.google.com/groups?q=group:comp.databases.theory+parent+child+trees+SQL&hl=en&selm=c0d87ec0.0111201021.2fd9ddbe%40posting.google.com&rnum=1
Onderaan dit bericht vind je de titel van het boek van deze meneer. Het is een algemeen SQL boek, maar wel een boek dat meer inzicht geeft in de algoritmen achter SQL queries, waarbij je veelal veel snellere queries mee kunt maken dan door bv maar lukraak ergens indices op te definieren.
Houdt verder rekening met:
• Views. Dit zijn de vaak vergeten holy grails. Een query met een ellenlange join, kun je beter als view opslaan en daar een select op doen. Je select is dan veel sneller. (Lees artikelen over views en hoe ze je kunnen helpen, bv op
www.sqlmag.com)
• Fill factor van indices. Een index is niet een instant snelheidsverhoger: een niet goed gebalanceerde, gevulde index werkt vertragend of levert maar amper snelheidswinst. (Hier zijn veel artikelen over geschreven, via google of sqlserver sites of zelfs books online makkelijk vindbaar)
• Stored procedures. Database logica is veel efficienter zodra het is geimplementeerd als een stored procedure. Stored procedures op temp tables daarentegen zijn soms erg traag omdat ze elke keer moeten worden gecompileerd bij temptable declaraties in IF BEGIN...END constructies. Lees artikelen hierover.
• Datafile management. SQLServer heeft de mogelijkheid tot het spreiden van je datafiles over meerdere disks. Bij een high-load server, kan het erg efficient zijn de logfiles op een aparte harddisk te plaatsen en bv voor elke database een aparte harddisk te gebruiken (indien je weinig databases in je SQLServer hebt hangen

) of iig een aparte harddisk voor de tempdb. RAID werkt lang niet altijd snelheidverhogend bij database servers. Hier zijn ook veel artikelen over geschreven. Lees ze.
• Hardware / OS tuning. Wat voor hardware is efficient voor een database server? Een veelproc systeem of een veel memory systeem? Lees de artikelen hierover.
• Connection pooling / database connections. Gisteren op T.net nog een waardeloos artikel over een test met de JDBC driver voor SQLserver vs. andere databases. Met OleDB fietste SQLserver alle databases er uit, met JDBC werd de database laatste. Het is erg belangrijk dat je applicatie die de data betrekt uit de database de juiste manier gebruikt om database connections te sharen en te hergebruiken. Tenslotte merk je in je data-betrekkende applicatie of de database 'traag' is of niet. Gebruik je wel connectionpooling? Zijn je ADO gebruikende routines wel zo opgezet dat ze database logica overlaten aan stored procs of ga je bv joins in business logic code doen? Lees de artikelen over n-tier development en Windows DNA op
http://msdn.microsoft.com
• Locking, serialization, transactions. Blokkeer je met onnodige transactions tabellen die veelvuldig worden geraadpleegd? Wat voor lockingmechanismen heeft SQLServer en hoe pas ik welke toe zodat je systeem EN veilig blijft (geen datacorruption) EN efficient?
En zo zijn er nog wel een aantal zaken op te noemen die meespelen in het efficienter maken van het complete plaatje. Een boek is leuk, maar geen boek behandelt alle bovenstaande punten uitvoerig.
Essentieel is (en wellicht kun je daarmee een paar boeken uitzoeken):
• Waar stop ik de database logica (dus welke layer gaat welke functionaliteit uitvoeren (stored procs, business logic) ?
• Hoe betrek ik op de meest efficiente manier data uit mn database in de situaties die ik kan onderscheiden (views, stored procs, simpele ado queries) ?
• Hoe tune ik SQLServer?
• Hoe pas ik geavanceerde technieken toe? (transactions, locking mechanismen etc) ?
Door de books online artikelen hierover door te nemen doe je de basiskennis op om te bepalen mbv query analyser en de profiler of je efficient omgaat met de resources die je gebruikt. Online articles en how-to's kunnen je helpen in specifieke situaties.