Als u dit artikel leest, bent u waarschijnlijk al bekend met SQL. Je weet hoe je basis SQL-query's moet schrijven. Er zijn veel manieren om een SQL-query uit te voeren om de gewenste resultaten in uw database te krijgen.
Niet alle SQL-query's zijn echter gelijk gemaakt. De meeste kunnen worden geoptimaliseerd om de best practices voor SQL-query's te volgen. Dit artikel richt zich op 9 tips voor het optimaliseren van SQL-query's. Na het lezen ken je alle do's en don'ts van het schrijven van SQL-query's.
1. Vermijd het gebruik van SELECT Asterisk (SELECT *)
Dit is een van de belangrijkste best practices voor SQL. De SELECT * -query retourneert records uit alle kolommen van de tabel. Hoewel dit in sommige gevallen nuttig is, levert deze zoekopdracht vaak veel complicaties op:
- Het is mogelijk dat u niet alle kolommen hoeft op te halen. SELECT * retourneert ze echter allemaal, waarbij buitensporige bandbreedte wordt verbruikt voor het uitvoeren van een zoekopdracht via het netwerk.
- Kolomnamen in een tabel kunnen worden gewijzigd of verwijderd en er kunnen nieuwe kolommen worden toegevoegd. U kunt dus onverwachte resultaten krijgen voor de SELECT * -query. Het specificeren van kolomnamen is een beter idee.
- SELECT * is langzamer dan SELECT Kolomnamen omdat de laatste kolomindexen kan gebruiken om gegevens te retourneren.
- De volgorde van de kolommen die door SELECT * worden geretourneerd, heeft u niet in de hand. U definieert echter de gewenste volgorde wanneer u de kolomnamen opgeeft.
2. Gebruik de WHERE en HAVING-clausule nauwkeurig
De WHERE- en HAVING-clausules in SQL hebben verschillende functionaliteiten. Daarom moeten we ze anders gebruiken. De drie belangrijkste use-cases van WHERE en HAVING staan hieronder:
- WHERE kan worden gebruikt met CRUD-query's, bijv. SELECT, INSERT, UPDATE, DELETE. Aan de andere kant kun je HAVING alleen gebruiken met de SELECT-instructie.
- WHERE filtert gegevens vóór een aggregatiebewerking zoals GROUP BY. Dan kan het worden gebruikt zonder enige aggregatiefunctie. HAVING moet worden gebruikt na aggregatie.
- We kunnen de aggregatiefuncties gebruiken, zoals SUM, MIN, MAX COUNT met de HAVING-clausule. Met de WHERE-component kunnen we geen aggregatiefuncties gebruiken, tenzij deze clausule deel uitmaakt van een subquery die is opgenomen in de HAVING-component.
3. Gebruik INNER JOIN-query in plaats van de WHERE-clausule voor het samenvoegen van tabellen
De JOIN-query is waarschijnlijk een van de meest bruikbare SQL-query's. Hiermee kunt u gegevens uit meerdere tabellen SELECTEREN. Hoewel u de WHERE-component kunt gebruiken om geaggregeerde gegevens uit twee tabellen te halen, is de WHERE-component zeer inefficiënt.
De WHERE-component retourneert CROSS JOIN, wat een cartesiaans product is van records in beide kolommen. Als u bijvoorbeeld 1.000 records in tabel A heeft en hetzelfde aantal records in tabel B, maakt de WHERE-component een CROSS JOIN aan met 1.000 x 1.000 =1.000.000 records.
Als de kolommen van tabellen A en B die betrokken zijn bij de WHERE-clausule slechts 1.000 gemeenschappelijke waarden hebben, retourneert de WHERE-component 1.000 records van de eerste 1.000.000 records die door het cartesiaanse product zijn gemaakt.
De INNER JOIN-component retourneert slechts 1.000 records waarin zowel tabellen A als B gemeenschappelijke waarden in de kolommen hebben. In dit geval heeft INNER JOIN 1.000x minder werk dan de WHERE-clausule.
Sommige databases zetten de WHERE-component in de JOIN-query achter de schermen om in de INNER JOIN-component. Het wordt echter altijd aanbevolen om INNER JOIN expliciet te gebruiken in plaats van de WHERE-component om de aanbevolen procedures voor SQL-codering te volgen.
4. Gebruik EXISTS, NOT EXISTS in plaats van IN en NOT IN in SQL
Gebruik altijd EXIST boven de IN-clausule als u het bestaan van een waarde in een bepaalde tabel wilt bevestigen.
Het proces dat de EXISTS-component uitvoert, stopt zodra het de vereiste waarde in de tabel vindt. Aan de andere kant scant de IN-query alles, zelfs nadat de benodigde waarde is gevonden.
Op dezelfde manier moet u altijd NOT EXISTS gebruiken in plaats van NOT IN wanneer u zoekt naar de waarde die niet in een tabel voorkomt.
5. Gebruik is gelijk aan operator (=) in plaats van LIKE Operator in SQL
U kunt zowel de =als de LIKE-operatoren gebruiken om tekenreeksen te matchen. Het belangrijkste verschil tussen de twee is dat de LIKE-operator wordt gebruikt voor het matchen van jokertekens zoals % om te zoeken naar gedeeltelijke tekenreeksen, terwijl de equals-operator "=" zoekt naar exacte overeenkomsten.
Als u tussen de twee moet kiezen, geeft u altijd de voorkeur aan de operator is gelijk aan ("="), omdat deze gebruikmaakt van geïndexeerde kolommen. Daarom is het sneller dan de LIKE-component.
6. Gebruik de LIMIT-clausule om zoekresultaten te verminderen
Als u gegevens uit meerdere tabellen of kolommen moet retourneren, gebruikt u de LIMIT-component (ook bekend als de TOP-component) om de queryresultaten te verminderen. Als er duizenden kolommen zijn, of als u alleen in uw tabellen wilt zien hoe de gegevens eruitzien, is het niet nodig om alle rijen terug te geven. Beperk in plaats daarvan het aantal rijen dat wordt geretourneerd door de SELECT-query met behulp van de LIMIT-clausule in combinatie daarmee.
7. Gebruik tabelaliassen bij het opvragen van meerdere tabellen
Gebruik altijd tabelaliassen om verwarring te voorkomen en te voorkomen dat databases kolomnamen parseren bij het zoeken naar de tabel waartoe ze behoren.
U moet al tabelnamen/aliassen gebruiken als u dezelfde kolomnamen in meerdere tabellen heeft, dus dit zal uw werklast niet vergroten.
8. Vermijd het voorvoegsel van opgeslagen procedures met "sp_"
Als u met opgeslagen procedures hebt gewerkt, heeft u hoogstwaarschijnlijk de naam van de opgeslagen procedure voorafgegaan door "sp_". Dit is niet de beste.
SQL Server begint met het zoeken naar opgeslagen procedures met "sp_" aan het begin van hun naam in de hoofddatabase voordat ze ergens anders gaan zoeken.
Daarom kunt u veel tijd besparen door opgeslagen procedures niet vooraf te laten gaan door "sp_". In plaats van te proberen de opgeslagen procedure in de hoofddatabase te vinden, zal de SQL-server dbo direct controleren als de eigenaar van de opgeslagen procedure.
9. Adopteer een goede stijl voor het schrijven van zoekopdrachten
Het is essentieel om de best practices voor SQL-query's te volgen, zoals goede stijlpraktijken bij het schrijven van SQL-query's. Besteed aandacht aan de onderstaande aanbevelingen om uw schrijfstijl voor vragen te verbeteren:
- Voeg altijd opmerkingen toe aan SQL-query's. Opmerkingen zullen niet alleen andere teamleden helpen uw vragen beter te begrijpen, maar u er ook aan herinneren wat u zelf in het verleden deed.
- Gebruik voor de hand liggende naamgevingsconventies. De database, tabellen, kolomnamen, tijdelijke tabellen en andere variabelenamen moeten 100% leesbaar en duidelijk zijn.
- Spreek uw zoekopdrachten in waar mogelijk. Innerlijke zoekopdrachten moeten één tabblad van links inspringen. Kolomnamen en typen in een tabel moeten ook worden ingesprongen. Inspringen zorgt voor een schoner uiterlijk en verbetert de leesbaarheid van query's, wat wordt weerspiegeld in de aanbevolen procedures voor SQL Server voor query's.
Conclusie
SQL is een zeer flexibele taal die tal van manieren biedt om gewenste taken op een database uit te voeren. Om uw toepassingen efficiënter en productiever te maken en langdurige databaseproblemen te voorkomen, past u moderne best practices voor SQL-queryoptimalisatie toe om uw query's te schrijven. Deze methoden helpen u de prestatieafstemming in SQL te versnellen, onnodige routines te elimineren en al uw werk beknopter en transparanter te maken.
Lees ook
22 handige SQL-indexvoorbeelden om uw zoekopdrachten te versnellen