Komplekse SQL-forespørgsler er fremragende til at gøre databasesøgninger meget specifikke og fleksible, men de kan også være svære at forstå og næsten umulige at fejlfinde – og du kan lige så godt glemme at genbruge dem.
Når forespørgsler går ud over dine standard SELECT- og WHERE-kommandoer, kan du endda opleve, at SQL Server-ydeevne begynder at lide, fordi forespørgselsoptimering har problemer med at behandle lange, komplekse forespørgsler.
Hvis du bemærker, at dine SQL-forespørgsler bruger et for stort antal komplekse join- og underforespørgsler, indlejrer forespørgsler i WHERE-klausuler og er afhængige af en masse AND- og OR-klausuler, er det sandsynligvis et godt tidspunkt at træde tilbage og lede efter måder at minimere noget af kompleksiteten.
Tips til at minimere SQL Server-forespørgselskompleksitet
Som vi nævnte ovenfor, elsker SQL Server-forespørgselsoptimering ikke komplekse SQL-forespørgsler. Her er fem måder at gøre dine forespørgsler mindre komplekse på, så de kan optimeres til forbedret ydeevne.
1. Fjern ELLER-klausuler, når det er muligt
Den nemmeste måde at gøre forespørgsler mindre komplekse på er ved at fjerne OR-klausuler, når det er muligt. Fordi OR er inkluderende, skal SQL Server behandle hver komponent i klausulen separat, hvilket virkelig bremser operationerne.
Når det ikke er muligt at fjerne OR, er den næstbedste mulighed at dele lange, komplekse forespørgsler op i mindre. Det virker lidt kontraintuitivt, at behandling af flere forespørgsler er hurtigere end at behandle én, men når det kommer til ELLER, er du bedre stillet med de mange forespørgsler.
2. Finjuster strengsøgninger
SQL Server gør mange ting godt, men fuzzy strengsøgninger er ikke en af dem. Søgning efter jokertegn, især på store borde, er ineffektive og dårlige for ydeevnen.
Der er et par justeringer, du kan anvende på strengsøgninger, som hjælper med at minimere indvirkningen på ydeevnen.
- Brug en søgning i ledende streng i stedet for en jokertegnssøgning (dvs. skift "%For%" til "For%")
- Anvend filtre såsom dato eller klokkeslæt på forespørgslen for at reducere størrelsen af dataene, før du kører strengsøgningen
- Anvend fuldtekstindeksering for at generere indekser, der giver mulighed for fleksibel strengsøgning på tekstkolonner
3. Pas på store skriveoperationer
Store skriveoperationer forårsager uenighed og genererer en masse logfiler. Uden markering kan store skriveoperationer blokere ressourcer fra brugere og skabe forsinkelsesproblemer samt udfylde transaktionslogfiler eller endda fysisk lager.
Fordi du ikke altid kan undgå store skriveoperationer, skal du være opmærksom på, hvornår du kører dem (jo mindre travlt serveren er, jo bedre) eller reducere antallet af rækker, der ændres pr. handling for at minimere risikoen for konflikter.
4. Ryd op i indekser
Indekser er en af de største syndere, når det kommer til dårlig ydeevne, men når du forsøger at optimere komplekse SQL-forespørgsler, kræver indeks nogle særlige overvejelser.
SQL Server har flere værktøjer, der fortæller dig, når manglende indekser påvirker forespørgselsydeevnen. Men før du hopper ind og begynder at tilføje indekser, skal du afgøre, om det ekstra indeks vil forbedre forespørgslen nok til at gøre det umagen værd. For eksempel, hvis forespørgslen kører 1 million gange om dagen, og indekset forbedrer det med 25 procent, så er det sandsynligvis det værd. Hvis forespørgslen sjældent bruges, giver det måske ikke mening.
Et par andre ting, du skal overveje, før du begynder at tilføje indekser, er, om eksisterende indekser kan justeres til at dække denne brugssituation uden at tilføje et nyt, og om dette indeks allerede eksisterer, men optimeringsværktøjet ignorerer det af en eller anden grund.
Andre måder, hvorpå indekser kan påvirke forespørgselsydeevnen, er over- eller underindekseringstabeller og tabeller, der mangler et klynget indeks eller en primær nøgle. Løsning af disse problemer vil hjælpe med kompleks SQL-forespørgselsydeevne.
5. Fortsæt med at tælle ned
Hver gang du tilføjer en tabel til en forespørgsel, bliver forespørgslen mere kompleks. For mange tabeller resulterer ofte i dårlige eksekveringsplaner, fordi forespørgselsoptimeringsværktøjet ikke kan fungere effektivt.
Hvis du bemærker, at en kompleks forespørgsel fungerer dårligt og har mange tabeller, kan dette være et af de tidspunkter, hvor opdeling af forespørgslen i mindre forespørgsler er det bedste valg, fordi det vil lette noget af byrden for optimeringsværktøjet.
Værktøjer til justering af ydeevne kan hjælpe med at minimere SQL Server-kompleksiteten
Når komplekse forespørgsler bugner forespørgselsoptimeringsværktøjet, ender du ofte med en ineffektiv eksekveringsplan, og ydeevnen lider. Ud over tipsene ovenfor er værktøjer til justering af ydeevne en værdifuld ressource til at minimere SQL Server-forespørgselskompleksitet og optimere ydeevnen.
Nedenfor er et par af de muligheder, du skal kigge efter, når du undersøger løsninger til justering af ydeevne.
Analyse af SQL Server Execution Plan Analyse
Justeringsværktøjet bør analysere din eksekveringsplan og bestemme, hvad der skal ændres, for at SQL Server kan udføre operationer mere effektivt.
SQL Server Execution Plan Visualization
Justeringsværktøjet bør præsentere udførelsesplanen på en måde, der er let at forstå og hjælper dig med at lokalisere de operationer, der bremser udførelsen.
Automatisk SQL-optimering
Justeringsværktøjet bør analysere din SQL og derefter automatisk omskrive den, indtil den når maksimal forbedringstid for eksekvering.
Sammenligning af optimerede og originale SQL-sætninger
Justeringsværktøjet skal fremhæve ændringer i SQL-sætningen, så du kan sammenligne de originale og optimerede versioner, før du implementerer ændringer.
Sammenligning af SQL Server-udførelsesplaner
Justeringsværktøjerne bør give en sammenligning af de originale og optimerede udførelsesplaner, så du ved, hvad der ændrede sig mellem versionerne.
Statistisk bevis
Dit tuning-værktøj bør levere data, der viser, hvorfor den optimerede SQL udføres hurtigere end den originale SQL-sætning.
Komplekse SQL Server-forespørgsler kan have en negativ indvirkning på systemets ydeevne. Brug disse tips og en løsning til justering af ydeevne af høj kvalitet til at rydde op i kompleksiteten og optimere effektiviteten af din SQL-forespørgsel.