SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   Transact-SQL.
                                         Czarna ksiêga
           KATALOG KSI¥¯EK
                                         Autor: Marcin Szeliga
                      KATALOG ONLINE     ISBN: 83-7361-125-8
                                         Format: B5, stron: 492
       ZAMÓW DRUKOWANY KATALOG           Przyk³ady na ftp: 65 kB


              TWÓJ KOSZYK                Transact-SQL to podstawowy jêzyk programowania baz danych w rodowisku MS SQL
                                         Server. Transact-SQL jest zmodyfikowan¹ i uzupe³nion¹ o elementy typowe dla
                    DODAJ DO KOSZYKA     proceduralnych jêzyków programowania (jak zmienne i instrukcje steruj¹ce
                                         wykonaniem programu) wersj¹ standardu SQL-92. Dziêki temu rozszerzeniu,
                                         jego mo¿liwo ci s¹ znacznie wiêksze ni¿ mo¿liwo ci standardowego SQL-a.
         CENNIK I INFORMACJE             SQL Server zosta³ wyposa¿ony w intuicyjne, a zarazem potê¿ne narzêdzie
                                         administracyjne — konsolê SQL Server Enterprise Menager. W rezultacie czê æ
                   ZAMÓW INFORMACJE      administratorów SQL Servera nie zna albo nie korzysta z mo¿liwo ci jêzyka Transact-
                     O NOWO CIACH        -SQL. A okazuje siê, ¿e ta sama operacja mo¿e byæ przeprowadzona kilkukrotnie
                                         szybciej, je¿eli zamiast konsoli u¿yjemy Transact-SQLa.
                       ZAMÓW CENNIK      Ksi¹¿ka „Transact-SQL. Czarna Ksiêga” to wyczerpuj¹ce i dog³êbne kompendium
                                         omawiaj¹ce nie tylko sam jêzyk Transact-SQL, ale równie¿ zasady projektowania
                                         baz danych, a tak¿e zarz¹dzanie SQL Serverem za pomoc¹ jêzyka Transact-SQL.
                 CZYTELNIA               Przedstawiono:
          FRAGMENTY KSI¥¯EK ONLINE          • Standardowe interfejsy jêzyka SQL instalowane wraz z SQL Serverem
                                            • Elementy jêzyka Transact-SQL i sk³adniê poszczególnych instrukcji jêzyka
                                              wraz z praktycznymi przyk³adami ich wykorzystania
                                            • Metody pobierania i modyfikowania danych
                                            • Optymalizacjê zapytañ
                                            • Wyszukiwanie pe³notekstowe i us³uga MS Search.
                                            • Zasady projektowania relacyjnych baz danych
                                            • Algorytmy przekszta³cania relacji poprzez kolejne postacie normalne
                                            • Tworzenie, modyfikowanie i usuwanie wszystkich typów obiektów bazodanowych
                                            • Bezpieczeñstwo i kontrolowanie dostêpu do danych
                                            • Integracjê SQL Servera z innymi serwerami firmy Microsoft
                                            • Tworzenie i przywracanie kopii zapasowych
Wydawnictwo Helion                          • Automatyzacjê czynno ci administracyjnych
ul. Chopina 6                               • Monitorowanie pracy SQL Servera i optymalizacjê jego wydajno ci
44-100 Gliwice                              • £¹czenie serwerów bazodanowych
tel. (32)230-98-63
                                            • Replikacjê danych pomiêdzy wieloma SZBD
e-mail: helion@helion.pl
Spis treści
   Wstęp .................................................................................................................11
Część I Język Transact-SQL ......................................................................15
   Rozdział 1. Interfejsy języka Transact-SQL ............................................................17
   SQL Query Analyzer ...................................................................................................................... 18
      Uruchamianie programu............................................................................................................ 19
      Praca z programem................................................................................................................... 19
   OSQL ........................................................................................................................................... 24
      Uruchamianie programu............................................................................................................ 25
      Praca z programem................................................................................................................... 25
   BCP.............................................................................................................................................. 26
      Uruchomienie programu............................................................................................................ 26
      Praca z programem................................................................................................................... 26
   TEXTCOPY.................................................................................................................................. 27
      Uruchomienie programu............................................................................................................ 27
      Praca z programem................................................................................................................... 27
   Oprogramowanie dodatkowe........................................................................................................... 28
      T-SQLEditPro ......................................................................................................................... 28
      SQL Editor .............................................................................................................................. 28
   Rozdział 2. Leksykon języka Transact-SQL ............................................................29
   Standardy SQL i historia ich powstania ............................................................................................ 29
   Typy instrukcji języka Transact-SQL............................................................................................... 31
       Instrukcje DDL ........................................................................................................................ 32
       Instrukcje DML ....................................................................................................................... 32
       Instrukcje DCL ........................................................................................................................ 33
   Znaczniki języka ............................................................................................................................ 33
       Dyrektywy wsadowe ................................................................................................................ 33
       Komentarze ............................................................................................................................. 36
       Identyfikatory .......................................................................................................................... 36
       Typy danych............................................................................................................................ 37
       Zmienne .................................................................................................................................. 41
       Funkcje ................................................................................................................................... 44
       Operatory ................................................................................................................................ 92
       Wyra enia ............................................................................................................................... 94
       Znaczniki sterujące wykonaniem programu................................................................................. 94
       Słowa kluczowe ....................................................................................................................... 96
   Rozdział 3. Pobieranie danych ..............................................................................97
   Przetwarzanie zapytań przez SQL Server ......................................................................................... 97
   Instrukcja SELECT ........................................................................................................................ 98
       Zwracanie określonej liczby wierszy ........................................................................................ 100
       Klauzula FROM..................................................................................................................... 101
       Łączenie wielu obiektów......................................................................................................... 103
4             Transact-SQL. Czarna księga


       Klauzula WHERE .................................................................................................................. 107
       Klauzula ORDER BY............................................................................................................. 111
       Klauzula GROUP BY............................................................................................................. 113
       Klauzula HAVING ................................................................................................................. 116
       Klauzule COMPUTE i COMPUTE BY.................................................................................... 116
       Klauzula OPTION.................................................................................................................. 118
       Klauzula FOR ........................................................................................................................ 119
       Klauzula INTO ...................................................................................................................... 120
    Podzapytania ............................................................................................................................... 121
       Podzapytania jako źródła danych ............................................................................................. 121
       Podzapytania jako wyra enia................................................................................................... 121
       Podzapytania powiązane ......................................................................................................... 122
       Podzapytanie jako złączenie .................................................................................................... 123
       Podzapytania z operatorem EXISTS ........................................................................................ 124
    Kursory....................................................................................................................................... 125
       Deklarowanie kursora ............................................................................................................. 125
       Typy kursorów....................................................................................................................... 126
       Blokady................................................................................................................................. 127
       Pobieranie danych .................................................................................................................. 127
       Opcje kursora ........................................................................................................................ 128
       Usuwanie kursora................................................................................................................... 130
    Rozdział 4. Optymalizacja zapytań ......................................................................133
    Query Optimizer .......................................................................................................................... 133
    Plan wykonania zapytania ............................................................................................................. 135
    Indeksy zawierające zapytania....................................................................................................... 138
    Analiza zapytań ........................................................................................................................... 139
        SARG ................................................................................................................................... 139
        Zapytania z operatorem AND .................................................................................................. 142
        Zapytania z operatorem OR..................................................................................................... 143
        Zapytania pobierające dane z kilku źródeł danych ..................................................................... 144
        Zapytania grupujące dane........................................................................................................ 152
    Rozdział 5. Wyszukiwanie pełnotekstowe............................................................155
    Usługa Microsoft Search............................................................................................................... 155
    Indeksy wyszukiwania pełnotekstowego......................................................................................... 156
        Procedury systemowe związane z usługą Microsoft Serach ........................................................ 156
        Funkcje języka Transact-SQL związane z usługą Microsoft Search............................................. 157
    Zapytania pełnotekstowe............................................................................................................... 159
        Predykat CONTAINS ............................................................................................................. 159
        Predykat FREETEXT ............................................................................................................. 161
        Funkcja CONTAINSTABLE................................................................................................... 161
        Funkcja FREETEXTTABLE................................................................................................... 162
    Rozdział 6. Modyfikowanie danych .....................................................................165
    Przetwarzanie transakcyjne ........................................................................................................... 165
    Wstawianie danych ...................................................................................................................... 167
        Instrukcja INSERT................................................................................................................. 167
    Usuwanie danych ......................................................................................................................... 171
        Instrukcja DELETE................................................................................................................ 171
        Instrukcja TRUNCATE .......................................................................................................... 173
    Aktualizowane danych.................................................................................................................. 174
        Instrukcja UPDATE ............................................................................................................... 174
Spis treści                   5


Część II Projektowanie i programowanie baz danych.................................. 177
   Rozdział 7. Projektowanie relacyjnych baz danych...............................................179
   Model relacyjnych baz danych ...................................................................................................... 179
      Zasady dotyczące struktury danych.......................................................................................... 182
      Zasady dotyczące przetwarzania danych................................................................................... 182
      Zasady dotyczące integralności danych .................................................................................... 188
   Diagram związków E/R ................................................................................................................ 193
      Określanie typów obiektów ..................................................................................................... 193
      Określanie atrybutów obiektów poszczególnych typów.............................................................. 194
      Wyodrębnianie danych elementarnych ..................................................................................... 194
      Określanie zale ności funkcyjnych zachodzących pomiędzy atrybutami...................................... 195
      Grupowanie danych w tabelach ............................................................................................... 196
      Określanie związków (relacji) zachodzących między encjami..................................................... 198
   Normalizacja ............................................................................................................................... 200
      Pierwsza postać normalna 1PN................................................................................................ 200
      Pierwsza postać anormalna...................................................................................................... 200
      Druga postać normalna 2PN.................................................................................................... 206
      Trzecia postać normalna 3PN .................................................................................................. 207
      Algorytmy sprowadzania relacji do wy szej postaci normalnej ................................................... 208
      Postać normalna Boyce’a-Codda ............................................................................................. 213
   Rozdział 8. Bazy danych.....................................................................................215
   Konwencja nazewnicza................................................................................................................. 215
   Fizyczna struktura bazy danych..................................................................................................... 215
       Dziennik transakcyjny ............................................................................................................ 216
       Struktura plików bazodanowych .............................................................................................. 217
       Struktura wiersza danych ........................................................................................................ 218
   Tworzenie baz danych.................................................................................................................. 219
       Instrukcja CREATE DATABASE............................................................................................ 220
       Opcje baz danych................................................................................................................... 222
   Modyfikacja baz danych ............................................................................................................... 228
       Instrukcja ALTER DATABASE .............................................................................................. 228
       Zwiększanie rozmiaru plików bazy danych............................................................................... 229
       Zmniejszanie rozmiaru plików bazy danych.............................................................................. 230
   Usuwanie baz danych ................................................................................................................... 233
       Instrukcja DROP DATABASE ................................................................................................ 233
   Grupy plików............................................................................................................................... 233
   Rozdział 9. Tabele..............................................................................................237
   Typy danych u ytkownika ............................................................................................................ 237
       Procedura systemowa sp_addtype............................................................................................ 237
       Procedura systemowa sp_droptype .......................................................................................... 238
   Instrukcja CREATE TABLE......................................................................................................... 238
       Przechowywanie wartości obliczonych na podstawie innych wartości ......................................... 240
   Opcje tabel .................................................................................................................................. 242
       Opcje zawę eń....................................................................................................................... 244
   Atrybuty rozszerzone.................................................................................................................... 245
       Procedura sp_addextendedproperty .......................................................................................... 245
       Odczytywanie wartości atrybutów rozszerzonych...................................................................... 246
       Procedura sp_updateextendedproperty...................................................................................... 247
       Procedura sp_dropextendedproperty......................................................................................... 247
   Instrukcja ALTER TABLE ........................................................................................................... 248
       Zmiana nazwy tabeli............................................................................................................... 249
   Instrukcja DROP TABLE ............................................................................................................. 250
6             Transact-SQL. Czarna księga


    Rozdział 10. Indeksy ..........................................................................................251
    Po co tworzyć indeksy? ................................................................................................................ 251
    Typy indeksów ............................................................................................................................ 252
        Indeksy grupujące .................................................................................................................. 252
        Indeksy niegrupujące .............................................................................................................. 253
        Indeksy kompozytowe ............................................................................................................ 253
    Dla których kolumn tworzyć indeksy?............................................................................................ 254
        Wpływ indeksów grupujących na sortowanie danych................................................................. 255
        Wpływ indeksów niegrupujących na sortowanie danych ............................................................ 257
        Wpływ indeksów na modyfikowanie danych............................................................................. 258
        Wpływ indeksów na dodawanie danych.................................................................................... 261
        Indeksy zawierające zapytanie ................................................................................................. 262
    Instrukcja CREATE INDEX ......................................................................................................... 264
        Współczynnik wypełnienia...................................................................................................... 266
    Opcje indeksów ........................................................................................................................... 268
    Instrukcja DROP INDEX ............................................................................................................. 269
    Statystyki .................................................................................................................................... 270
        Instrukcja CREATE STATISTICS .......................................................................................... 271
        Instrukcja UPDATE STATISTICS .......................................................................................... 272
        Instrukcja DROP STATISTICS............................................................................................... 272
    Rozdział 11. Widoki............................................................................................273
    Instrukcja CREATE VIEW ........................................................................................................... 273
        Złączenie zewnętrzne w definicji widoków ............................................................................... 276
        Uporządkowywanie danych poprzez widoki.............................................................................. 276
    Opcje widoków............................................................................................................................ 277
    Modyfikowanie danych poprzez widoki ......................................................................................... 279
    Instrukcja ALTER VIEW ............................................................................................................. 280
    Instrukcja DROP VIEW ............................................................................................................... 280
    Rozdział 12. Procedury składowane....................................................................281
    Przetwarzanie procedur przez SQL Server ..................................................................................... 282
        Tworzenie ............................................................................................................................. 282
        Wykonanie ............................................................................................................................ 282
        Wywołanie ............................................................................................................................ 283
    Konwencja nazewnicza procedur składowanych ............................................................................. 283
    Instrukcja CREATE PROCEDURE............................................................................................... 284
        Automatyczne uruchamianie procedur...................................................................................... 286
        Zagnie d anie procedur .......................................................................................................... 287
    Opcje procedur składowanych....................................................................................................... 287
    Wykonywanie procedur składowanych........................................................................................... 288
    Instrukcja ALTER PROCEDURE ................................................................................................. 289
    Instrukcja DROP PROCEDURE ................................................................................................... 289
    Rozdział 13. Wyzwalacze....................................................................................291
    Wyzwalacze a zawę enia .............................................................................................................. 292
    Typy wyzwalaczy ........................................................................................................................ 292
        Wyzwalacze wywoływane wykonaniem instrukcji INSERT....................................................... 292
        Wyzwalacze wywoływane wykonaniem instrukcji DELETE...................................................... 292
        Wyzwalacze wywoływane wykonaniem instrukcji UPDATE ..................................................... 293
    Instrukcja CREATE TRIGGER..................................................................................................... 293
        Wyzwalacze a monitorowanie aktywności u ytkowników.......................................................... 295
    Opcje wyzwalaczy ....................................................................................................................... 297
    Instrukcja ALTER TRIGGER ....................................................................................................... 298
    Instrukcja DROP TRIGGER ......................................................................................................... 299
Spis treści                    7


  Rozdział 14. Funkcje użytkownika ......................................................................301
  Typy funkcji u ytkownika............................................................................................................. 301
  Instrukcja CREATE FUNCTION .................................................................................................. 301
      Tworzenie funkcji powiązanych ze schematem bazy danych ...................................................... 305
  Opcje funkcji ............................................................................................................................... 305
  Instrukcja ALTER FUNCTION .................................................................................................... 306
  Instrukcja DROP FUNCTION ...................................................................................................... 307
Część III Zarządzanie SQL Serverem za pomocą języka Transact-SQL........... 309
  Rozdział 15. Microsoft SQL Server 2000.............................................................311
  Usługi SQL Servera ..................................................................................................................... 311
      Wymiana danych pomiędzy usługami MSSQLServer i SQLServerAgent .................................... 312
  Instancje SQL Servera.................................................................................................................. 315
  Bazy danych SQL Servera ............................................................................................................ 315
  Rozdział 16. Bezpieczeństwo..............................................................................319
  Model bezpieczeństwa SQL Servera .............................................................................................. 319
      Tryb Windows NT/2000 ......................................................................................................... 320
      Tryb mieszany ....................................................................................................................... 321
      Delegacja uprawnień............................................................................................................... 322
      Przedstawienie uprawnień ....................................................................................................... 323
      Dostęp do baz danych............................................................................................................. 323
  Zarządzanie dostępem do SQL Servera .......................................................................................... 323
      Tworzenie loginów ................................................................................................................. 323
      Opcje loginów........................................................................................................................ 326
      Usuwanie loginów .................................................................................................................. 328
  Zarządzanie uprawnieniami u ytkowników .................................................................................... 329
      Zarządzanie dostępem do baz danych....................................................................................... 329
      Role standardowe ................................................................................................................... 332
      Role aplikacyjne..................................................................................................................... 338
      Przypisywanie uprawnień u ytkownikom i rolom...................................................................... 340
      Właściciel obiektu .................................................................................................................. 346
  Ograniczanie uprawnień za pomocą widoków i procedur składowanych............................................ 347
  Rozdział 17. Automatyzacja typowych zadań administracyjnych...........................349
  Integracja SQL Servera z serwerem poczty elektronicznej................................................................ 349
      Konfiguracja usług SQLAgentMail oraz SQL Mail.................................................................... 350
      Procedury rozszerzone usługi SQL Mail ................................................................................... 350
  Integracja SQL Servera z serwerem WWW ..................................................................................... 353
      Konfiguracja katalogu wirtualnego........................................................................................... 353
      Umieszczanie instrukcji języka Transact-SQL bezpośrednio w adresie URL................................ 354
      Wykonywanie instrukcji zapisanych w szablonach XML ........................................................... 355
      Wykonywanie zapytań typu XPATCH ..................................................................................... 356
  Łączenie serwerów bazodanowych ................................................................................................ 356
      Tworzenie powiązań między serwerami.................................................................................... 356
      Zdalne wykonywanie instrukcji języka Transact-SQL ............................................................... 358
      Usuwanie powiązań pomiędzy serwerami ................................................................................. 361
  Operatorzy .................................................................................................................................. 362
  Zadania ....................................................................................................................................... 365
      Tworzenie zadań .................................................................................................................... 365
      Tworzenie kroków zadania...................................................................................................... 368
      Tworzenie harmonogramów wykonania zadań .......................................................................... 372
      Wykonywanie zadań............................................................................................................... 375
8             Transact-SQL. Czarna księga


        Historia wykonania zadań ....................................................................................................... 376
        Zadania wykonywane na wielu serwerach................................................................................. 378
        Usuwanie zadań ..................................................................................................................... 381
    Alarmy........................................................................................................................................ 382
        Komunikaty błędów................................................................................................................ 383
        Tworzenie alarmów ................................................................................................................ 385
        Wywoływanie błędów u ytkownika ......................................................................................... 389
        Alarmy wywoływane bie ącą wydajnością ............................................................................... 391
        Usuwanie alarmów ................................................................................................................. 392
    Rozdział 18. Tworzenie kopii zapasowych ...........................................................393
    Kopie zapasowe ........................................................................................................................... 395
        Kiedy tworzyć kopie zapasowe? .............................................................................................. 396
    Urządzenia kopii zapasowych........................................................................................................ 398
        Trwałe urządzenia kopii zapasowych ....................................................................................... 398
        Tymczasowe urządzenia kopii zapasowych............................................................................... 399
    Wykonywanie kopii zapasowych ................................................................................................... 400
        Instrukcja BACKUP DATABASE ........................................................................................... 400
        Instrukcja BACKUP LOG ...................................................................................................... 401
        Pełna kopia bazy danych......................................................................................................... 402
        Przyrostowa kopia bazy danych............................................................................................... 403
        Kopia dziennika transakcyjnego............................................................................................... 404
        Kopia plików lub grup plików ................................................................................................. 406
    Strategie wykonywania kopii zapasowych ...................................................................................... 407
        Strategia pełnych kopii bazy danych ........................................................................................ 407
        Strategia pełnych kopii bazy danych i kopii dziennika transakcyjnego......................................... 407
        Strategia przyrostowych kopii bazy danych .............................................................................. 408
        Strategia kopii plików bazy danych.......................................................................................... 409
    Rozdział 19. Odtwarzanie kopii zapasowych........................................................411
    Proces odtwarzania spójności bazy danych ..................................................................................... 411
    Przygotowanie do odtworzenia kopii zapasowej.............................................................................. 412
       Weryfikacja kopii zapasowej ................................................................................................... 412
       Ograniczenie dostępu do bazy danych...................................................................................... 414
    Odtwarzanie kopii zapasowych...................................................................................................... 414
       Instrukcja RESTORE DATABASE.......................................................................................... 415
       Instrukcja RESTORE LOG ..................................................................................................... 416
       Inicjowanie procesu odtwarzania spójność bazy danych............................................................. 417
       Odtwarzanie pełnych kopii baz danych..................................................................................... 417
       Odtwarzanie przyrostowych kopii baz danych........................................................................... 418
       Odtwarzanie kopii dziennika transakcyjnego............................................................................. 418
    Odtwarzanie systemowych baz danych .......................................................................................... 420
       Co zrobić w przypadku braku kopii baz systemowych?.............................................................. 421
       Co zrobić w przypadku posiadania aktualnych kopii baz systemowych?...................................... 422
    Konfigurowanie serwera zapasowego............................................................................................. 423
    Rozdział 20. Monitorowanie i optymalizacja pracy SQL Servera............................425
    Optymalizacja wydajności systemu bazodanowego ......................................................................... 425
       Zasoby komputera.................................................................................................................. 426
       System operacyjny ................................................................................................................. 433
       SQL Server............................................................................................................................ 435
       Baza danych .......................................................................................................................... 437
       Program kliencki .................................................................................................................... 442
    Monitorowanie bie ącej aktywności u ytkowników ........................................................................ 443
Spis treści                   9


   Rozdział 21. Replikacja baz danych ....................................................................447
   Wstęp do replikacji....................................................................................................................... 447
       Model wydawca — dystrybutor — subskrybent ........................................................................ 447
       Publikacje.............................................................................................................................. 448
       Synchronizowanie danych....................................................................................................... 448
       Typy replikacji ....................................................................................................................... 449
       Fizyczne modele replikacji ...................................................................................................... 450
   Konfiguracja replikacji pomiędzy serwerami bazodanowymi ........................................................... 451
       Wybór dystrybutora................................................................................................................ 452
       Wybór wydawcy i subskrybenta .............................................................................................. 452
   Agenci replikacji .......................................................................................................................... 452
       Agent migawki....................................................................................................................... 452
       Agent transakcji ..................................................................................................................... 453
       Agent scalania........................................................................................................................ 454
       Agent dystrybucji ................................................................................................................... 454
       Agent kolejkowania ................................................................................................................ 454
   Replikacja migawkowa ................................................................................................................. 455
   Replikacja transakcyjna ................................................................................................................ 457
   Replikacja scalana ........................................................................................................................ 460
       Rozwiązywanie konfliktów ..................................................................................................... 461
   Zarządzanie replikacjami .............................................................................................................. 462
       Replikowanie definicji tabel .................................................................................................... 462
       Replikowanie definicji widoków, funkcji i procedur .................................................................. 463
       Sprawdzanie replikacji danych................................................................................................. 463
Dodatki ............................................................................................... 467
   Skorowidz .........................................................................................................469
Rozdział 4.
Optymalizacja zapytań
    Zapytania, tak jak pozostałe instrukcje języka Transact-SQL, przed skompilowaniem i wy-
    konaniem są optymalizowane przez wewnętrzny proces SQL Servera o nazwie Query
    Optimizer. Jego zdaniem jest znalezienie najtańszego sposobu wykonania instrukcji.
    Query Optimizer bazuje na liczbie operacji wejścia-wyjścia oraz na liczbie obliczeń doko-
    nanych przez procesor niezbędnych do wykonania instrukcji.

    Query Optimizer szacuje koszt operacji wejścia-wyjścia na podstawie:
     1. Struktury tabel przechowujących dane, do których odwołuje się instrukcja
        i istniejących, związanych z nimi indeksów.
     2. Kosztu operacji złączenia ró nego typu danych zapisanych w kilku tabelach
        źródłowych.
     3. Istniejących lub tworzonych dynamicznie przez Query Optimizera statystyk
        opisujących dane źródłowe.
     4. Metainformacji opisujących fizyczną strukturę plików, w których zapisane są
         ądane dane.

        Ponieważ Query Optimizer oblicza koszt wykonania instrukcji na podstawie statystyk,
        nieaktualne lub nieadekwatne statystki spowodują utworzenie nieefektywnego planu jej
        wykonania. Mechanizm tworzenia i aktualizacji statystyk został opisany w rozdziale 10.

    Wynikiem optymalizacji jest znalezienie takiego sposobu wykonania instrukcji, który
    zwraca najmniejszą z mo liwych liczbę wierszy i w związku z tym wymaga odczytania
    najmniejszej liczby stron (8 KB spójnych bloków danych). Celem optymalizacji jest
    tak e znalezienie takiego wykonywania, którego całkowity czas przeprowadzania jest
    najkrótszy.

        Fizyczna struktura baz danych została opisana w znajdującym się w. części poświęconej
        projektowaniu i tworzeniu baz danych rozdziale 8. W rozdziale 10. znajdują się
        szczegółowe wskazówki dotyczące tworzenia i wykorzystywania indeksów w celu
        poprawy wydajności zapytań.



Query Optimizer
    Optymalizacja instrukcji języka Transact-SQL przebiega według następującego schematu:
134   Część I   Język Transact-SQL


       1. Po sprawdzeniu poprawności syntaktycznej sprawdzana jest poprawność
          semantyczna (ang. Parse). Na tym etapie instrukcja zostanie „podzielona”
          na znaczniki interpretowane przez SQL Server.
       2. Następuje standaryzacja — zapisanie znaczników instrukcji Transact-SQL
          w jednoznacznej postaci (np. ujednolicenie definiowania aliasów raz
          definiowanych za pomocą słowa kluczowego #5, raz bez niego). Na tym etapie
          wszystkie redundantne znaczniki instrukcji zostają usunięte.
       3. Kolejnym etapem jest optymalizacja — wybór jednego z przygotowanych
          planów wykonania. Na tym etapie następuje analiza indeksów i statystyk oraz
          metod złączania danych. Etap mo na podzielić na trzy fazy:
          a. Analiza zapytania — wybór metod wyszukiwania i łączenia danych źródłowych
             mający na celu zminimalizowanie liczby danych, które muszą zostać odczytane
             do wykonania instrukcji.
          b. Wybór indeksów — na podstawie statystyk tabel i indeksów następuje wybór
             tych indeksów, do których odwołanie spowoduje zwrócenie najmniejszej
             liczby danych (minimalizacja liczby logicznych i fizycznych odczytów
             bloków danych).
          c. Wybór metody złączania tabel — na podstawie struktury i liczby danych oraz
             liczby pamięci operacyjnej niezbędnej do wykonania złączenia wybierany
             jest sposób złączania tabel. W tym momencie określone zostaje równie ,
             która tabela będzie traktowana jako wewnętrzna, a która jako zewnętrzna,
             w przypadku złączenia poprzez pętlę wyszukiwania.
       4. Następnie instrukcja wykonana według opracowanego optymalnego planu zostaje
          skompilowana.
       5. Query Optimizer wybiera optymalny sposób pobrania wybranych (wynikowych)
          danych. Na przykład: czy odwołać się do indeksu, czy odczytać tabelę — wbrew
          pozorom dla małych tabel odczytanie całej ich zawartości okazuje się tańszym
          sposobem na odczytanie danych ni odwoływanie się do nich poprzez indeksy.

      Skompilowana według optymalnego planu instrukcja języka Transact-SQL zostaje zapisana
      w buforze procedury — przydzielonej przez SQL Server części pamięci operacyjnej
      wykorzystywanej wyłącznie do przechowywania skompilowanych procedur.

          W buforze procedury mogą być przechowywane maksymalnie dwie wersje skompilowanej
          instrukcji — jedna wykonywana równolegle, druga szeregowo.

      Poniewa w pamięci procedury zapisana zostaje wyłącznie instrukcja języka Transact-SQL,
      bez informacji o tym, który u ytkownik ją wykonał, odwołanie się do niej powoduje, e
      SQL Server musi wyznaczyć bie ący kontekst jej wykonania. Dlatego, je eli instrukcja
      zawiera wyłącznie identyfikatory obiektów, bez identyfikatora ich właściciela, SQL Server
      przyjmie, e właścicielem obiektów jest u ytkownik wykonujący instrukcję, a dopiero
      potem sprawdzi, czy obiekty nie nale ą do u ytkownika FDQ. Wynika z tego, e jawne
      odwoływanie się do obiektów za pomocą nazwy u ytkownika i nazwy obiektu przy-
      spiesza wykonanie skompilowanych instrukcji.
Rozdział 4.   Optymalizacja zapytań           135


    Zoptymalizowana na podstawie nieaktualnych statystyk instrukcja nie będzie dłu ej wy-
    konywana według najlepszego planu. Równie , je eli zmieniła się struktura obiektów,
    do których odwoływała się instrukcja, próba wykonania tej instrukcji zakończy się błę-
    dem. Z tych powodów skompilowana instrukcja jest w zale ności od potrzeb rekom-
    pilowana. Ponowna kompilacja instrukcji jest przeprowadzana, je eli:
     1. Zmieniona została definicja obiektu, do którego instrukcja się odwołuje (wykonano
        polecenie #.6'4).
     2. Wymuszono aktualizacje statystyk, na podstawie których przygotowany został
        plan wykonania instrukcji (wykonano instrukcję 72&#6' 56#6+56+%).
     3. Usunięto indeks wykorzystywany przez instrukcję (wykonano instrukcję &412
        +0&':).
     4. Z tabeli źródłowej usunięto lub dodano do niej du ą (względem stanu w momencie
        optymalizacji instrukcji) liczbę wierszy.
     5. Wymuszono rekompilację instrukcji (wywołano procedurę systemową
        URATGEQORKNG).



Plan wykonania zapytania
        Plan wykonania instrukcji można poznać odczytując zawartość tabeli systemowej
        U[UKPFGZGU. Jednak bezpośrednie odwoływanie się do tabel systemowych nie jest
        zalecane, a w tym przypadku istnieją inne sposoby uzyskania żądanych danych.

    Query Analyzer pozwala na wyświetlenie statystyk związanych z czasem (włączenie opcji
    5'6 56#6+56+% 6+/') i liczbą operacji wejścia-wyjścia (opcja 5'6 56#6+56+% +1). Ponadto
    mo emy wyświetlić opracowany przez Query Optimizera plan wykonania instrukcji
    (opcja 5'6 5*192.#0 6':6 lub 5'6 5*192.#0A#..). Na przykład po włączeniu dwóch
    pierwszych opcji wykonanie poni szego zapytania spowoduje wyświetlenie poni szych
    informacji:
     75' RWDU
     5'.'%6 &+56+0%6 VV[RG
     (41/ VKVNGU #5 V
     +00'4 ,1+0 VKVNGU #5 V
     10 VV[RG  VV[RG
     9*'4' VRWDAKF  VRWDAKF
     )1
     53. 5GTXGT 'ZGEWVKQP 6KOGU
        %27 VKOG   OU GNCRUGF VKOG   OU
     53. 5GTXGT RCTUG CPF EQORKNG VKOG
        %27 VKOG   OU GNCRUGF VKOG   OU
     53. 5GTXGT 'ZGEWVKQP 6KOGU
        %27 VKOG   OU GNCRUGF VKOG   OU
     V[RG
     
     DWUKPGUU
     RU[EJQNQI[
136       Część I      Język Transact-SQL


           
 TQY
U CHHGEVGF
           6CDNG VKVNGU  5ECP EQWPV  NQIKECN TGCFU  RJ[UKECN TGCFU  TGCFCJGCF TGCFU 
           53. 5GTXGT 'ZGEWVKQP 6KOGU
              %27 VKOG   OU GNCRUGF VKOG   OU
           53. 5GTXGT RCTUG CPF EQORKNG VKOG
              %27 VKOG   OU GNCRUGF VKOG   OU

          Natomiast włączenie opcji 5'6 5*192.#0 6':6 spowoduje wyświetlenie pokazanego w roz-
          dziale 3. planu wykonania instrukcji.

          Informacje na temat czasu wykonania poszczególnych opisanych wcześniej faz przetwa-
          rzania przez SQL Server instrukcji języka Transact-SQL nie wymagają komentarza. Przyj-
          rzyjmy się informacjom związanymi z liczbą operacji wejścia-wyjścia:
           1. UECP EQWPV — określa liczbę odwołań do tabeli źródłowej.
           2. NQIKECN TGCFU — określa liczbę stron danych odczytanych z pamięci podręcznej.
           3. RJ[UKECN TGCFU — określa liczbę stron danych odczytanych z dysku. Ta liczba
                 nigdy nie jest większa od liczby stron odczytanych z pamięci podręcznej.
                 Na podstawie tych dwóch wartości mo na obliczyć współczynnik trafień:
                      współczynnik trafień = (logical reads – physical reads) / logical reads
           4. TGCFCJGCF TGCFU — określa liczbę stron umieszczoną w pamięci podręcznej.

          Sam plan wykonania instrukcji mo e równie zostać przedstawiony w postaci graficznej
          (rysunek 4.1). Zawarte są w nim informacje dotyczące następujących zagadnień:
           1. Kroki wykonywania instrukcji i ich kolejność.
           2. Logiczne operatory algebry zbiorów u yte podczas wykonywania instrukcji.
           3. Fizyczna implementacja tych operatorów wykorzystana do wykonania zapytania
                 (tabela 4.1).

Rysunek 4.1.
Plan wykonania
zapytania
Rozdział 4.    Optymalizacja zapytań             137


Tabela 4.1. Lista operatorów fizycznych

 Symbol         Znaczenie                 Opis
                Odczytanie indeksu        Wyszukanie (na podstawie podanych warunków) danych
                                          z indeksu niegrupującego

                Pętla wyszukiwania        Wyszukanie (z reguły w oparciu o indeks) w wewnętrznej
                                          tabeli złączenia wszystkich wierszy zgodnych z kolejnym
                                          wierszem zewnętrznej tabeli złączenia
                Porządkowanie danych      Uporządkowanie wszystkich danych źródłowych


                Przeszukanie indeksu      Wyszukanie w indeksie niegrupującym wierszy danych


                Przeszukanie tabeli       Wyszukanie w tabeli danych spełniających podane kryteria

                Przeszukanie wskaźników   Wyszukanie danych na podstawie identyfikatora wiersza lub
                                          klucza indeksu grupującego rekordy w tabeli lub w indeksie
                                          grupującym
                Wybieranie danych         Wyszukanie w zbiorze danych źródłowych rekordów
                                          spełniających podane kryteria

                Zgodność funkcji skrótu   Złączenie tabel na podstawie wyliczonej dla ka dego wiersza
                                          wartości funkcji skrótu
                Złączenie                 Dowolnego typu (z wyjątkiem złączenia tabeli z nią samą
                                          oraz złączenia krzy owego) złączenie tabel lub widoków


           Poszczególne kroki związane z wykonaniem instrukcji zapisywane są od strony prawej
           do lewej. W ramach ka dego kroku mo liwe jest wykonanie dowolnej liczby operacji
           — w tym przypadku odczytanie indeksów obu kolumn zostało wykonane jako jeden
           krok składający się z dwóch operacji. Związek pomiędzy poszczególnymi operacjami
           reprezentują strzałki. Ustawienie kursora na symbolu operatora fizycznego spowoduje
           wyświetlenie dodatkowych informacji o danej operacji (rysunek 4.2).

Rysunek 4.2.
Informacje
o złączeniu
tabel t1 i t2
138   Część I   Język Transact-SQL


      Wyświetlając dodatkowe informacje o ka dej operacji poznamy:
          argumenty wywołania operacji (ang. Argument),
          koszt wykonania operacji i jego szacunkowy udział w koszcie wykonania
          instrukcji (ang. Cost),
          koszt wykonania operacji i operacji przez nią wywołanych (ang. Subtree cost),
          liczbę wykonania operacji w ramach instrukcji (ang. Number of executes),
          liczbę zwróconych przez operację wierszy (ang. Row count),
          szacunkową wielkość zwróconych przez operację wierszy (ang. Estimated row size),
          szacunkowy koszt operacji wejścia-wyjścia przeprowadzonych przez operację
          (ang. I/O cost),
          szacunkowy koszt wykorzystania zasobów procesora przez operację (ang. CPU cost).



Indeksy zawierające zapytania
          Indeksy różnego typu i sposoby ich tworzenia zostały opisane w rozdziale 10.


      Optymalną pod względem szybkości odczytu danych jest sytuacja, w której wszystkie
       ądane dane (wyra enia wymienione w instrukcji 5'.'%6) mogą zostać odczytane z in-
      deksu. Mówimy wtedy, e indeks zawiera zapytanie. Aby indeks zawierał zapytanie,
      wszystkie dane źródłowe muszą być poindeksowane. Dotyczy to kolumn wymienionych
      w poleceniu 5'.'%6, w klauzuli 9*'4', )4172 $; i 14'4 $;. W takim przypadku pobranie
      danych sprowadza się do znalezienia i odczytania odpowiednich liści indeksu, bez koniecz-
      ności odczytywania stron zawierających dane.

          SQL Server pozwala na tworzenie indeksów dla danych będących wynikiem funkcji
          grupującej. Jeżeli zapytania dotyczą wyliczanych wartości utworzenie indeksów tego
          typu spowoduje wielokrotny wzrost wydajności zapytania, w ramach którego obliczane
          są te wartości.

      Sprawdzić, czy istnieje indeks zawierający zapytanie, mo emy wyświetlając graficzny plan
      jego wykonania, a następnie wyświetlając szczegóły operacji odczytania indeksu. Je eli
      znajduje się tam informacja: 5ECPPKPI C PQPENWUVGTGF KPFGZ GPVKTGN[ QT QPN[ C TCPIG
      oznacza to, e do wykonania zapytania wykorzystano wyłącznie dane przechowywane
      w niegrupującym indeksie (rysunek 4.3).

      Nie oznacza to, e najlepszym rozwiązaniem jest stworzenie indeksu zawierającego
      wszystkie kolumny wybranej tabeli — w takim przypadku utworzymy po prostu kopię
      tabeli i zamiast spodziewanego zysku wydajności uzyskamy jej spadek. Tworząc indeksy
      zawierające zapytania nale y wybierać wyłącznie kolumny często występujące w zapyta-
      niach i o podobnej wielkości (dodanie do indeksu zawierającego dane z trzech kolumn
      typu UOCNNKPV danych z kolumny typu XCTEJCT 
 jest ekstremalnym przykładem źle
      zaprojektowanego indeksu).
Rozdział 4.   Optymalizacja zapytań         139


Rysunek 4.3.
Odczytanie nazw
poszczególnych
kategorii z tabeli
categories




                 Niegrupujący indeks zawierający zapytanie jest funkcjonalnym odpowiednikiem indeksu
                 grupującego i korzystanie z niego wiąże się z tymi samymi korzyściami — po znalezieniu
                 pierwszej spełniającej podany warunek wartości nie potrzebne jest tworzenie wskaźników
                 do zewnętrznych danych (tabeli), a ponieważ dane indeksu zapisane są w określonym
                 porządku, wystarczy odczytać określoną liczbę stron przechowujących żądane dane.



Analiza zapytań
            W zale ności od typu zapytania, wykorzystanych operatorów logicznych czy metod łączenia
            tabel, Query Optimizer posłu y się odmiennymi szablonami umo liwiającymi znalezienie
            optymalnego planu wykonania instrukcji. Znajomość tych szablonów jest niezbędna do
            tworzenia wydajnych zapytań.

                 Aby wyniki uzyskane przez Czytelników nie różniły się od przedstawianych w książce
                 przed wykonaniem opisywanych programów należy przywrócić oryginalną postać baz
                 0QTVJYKPF i RWDU. Można to osiągnąć zatrzymując SQL Server i nadpisując pliki .mdf
                 i .ldf tych baz plikami znajdującymi się na płycie instalacyjnej serwera.


SARG
            Akronim 5#4) (ang. Search ARGuments) określa pewien specjalny podzbiór argumentów
            wyszukiwania, czyli wyra eń wymienionych w klauzuli 9*'4' instrukcji 5'.'%6. Argu-
            menty 5#4) charakteryzuje:
                 Obecność stałej, której wartość jest porównywana z polami wybranej kolumny
                 tabeli źródłowej.
                 Wyszukiwanie wartości równych wzorcowi, nale ących do zakresu wyznaczonego
                 przez wzorzec lub przez połączenie kilku argumentów 5#4) za pomocą operatora
                 koniunkcji.

            Wynika z tego, e dla argumentów 5#4) dopuszczalnymi operatorami są: , , , , ,
            $'69''0 oraz, po spełnieniu dodatkowych warunków, .+-'. To, czy argument zawiera-
            jący operator .+-' mo e zostać uznany za argument 5#4), zale y od pozycji symbolu
            wieloznacznego ( ). Je eli występuje on jako ostatni znak wzorca, czyli mo liwe będzie
140   Część I   Język Transact-SQL


      ograniczenie liczby stron, które SQL Server będzie musiał odczytać, aby znaleźć ądane
      wartości, to taki argument będzie argumentem 5#4).

      W przypadku u ycia operatora  , 016, , , , 016 ':+565, 016 +0 czy 016 .+-' ko-
      nieczne okazuje się sprawdzenie wartości wszystkich wierszy tabeli źródłowej. Chocia
      nie oznacza to, e SQL Server nie potrafi skorzystać z indeksów przy tworzeniu planu
      zapytania zawierającego wy ej wymienione operatory, to nale y dą yć do zastąpienia takich
      operatorów argumentami 5#4).

      Wykonanie zapytania zawierającego argument 5#4) przebiega według następującego
      schematu:
       1. Optymalizator sprawdza, czy istnieją przydatne do wykonania zapytania indeksy.
       2. Je eli taki indeks zostanie znaleziony, rozpoczyna się wyszukiwanie (za pomocą
          operatora ) stron indeksu przechowujących dane zgodne z ądanym wzorcem.

          Domyślnie dane indeksów zapisane są na dysku w porządku rosnącym.


       3. Wszystkie wartości spełniające zadane kryteria są odczytywane, a jeśli jest to
          konieczne, odczytywane są z tabeli wartości przechowywane w pozostałych
          polach danego wiersza.

      Porównajmy koszt i plan wykonania zapytania wykorzystującego argument 5#4) z zapy-
      taniem zwracającym ten sam wynik, ale niezawierającym argumentu 5#4):
       75' 0QTVJYKPF
       5'.'%6
(41/ FDQ1TFGTU
       9*'4' %WUVQOGT+  )4154
       )1
       5VOV6GZV
       
          ^$QQMOCTM .QQMWR
$11-/#4-
=$OM? 1$,'%6
=0QTVJYKPF?=FDQ?=1TFGTU?
               ^+PFGZ 5GGM
1$,'%6
=0QTVJYKPF?=FDQ?=1TFGTU?=%WUVQOGT+?
                 5''-
=1TFGTU?=%WUVQOGT+?%QPXGTV
=? 14'4' (149#4
       
 TQY
U CHHGEVGF
       6CDNG 1TFGTU  5ECP EQWPV  NQIKECN TGCFU  RJ[UKECN TGCFU  TGCFCJGCF TGCFU 

      Poniewa pobieramy wszystkie dane z wszystkich kolumn tabeli, optymalizator musi u yć
      wskaźnika do tabeli — utworzenie indeksu kompozytowego dla wszystkich kolumn tabeli
      spowodowałby jedynie pogorszenie wydajności. Jednak wybór wierszy spełniających
      zadane kryteria odbywa się poprzez odczytanie kolejnych liści indeksu, dzięki czemu
      SQL Server musi odczytać jedynie wybrane strony tabeli.

      Gdyby liczba odczytanych stron była stosunkowo du a, tak jak na przykład w przypadku
      klienta o identyfikatorze (4#0-, optymalizator zdecydowałby się na wykorzystanie indeksu
      grupującego i sprawdzanie warunku bezpośrednio na danych tabeli, bez wykorzystywania
      indeksu powiązanego z kolumną %WUVQOGT+:
       75' 0QTVJYKPF
       5'.'%6
(41/ FDQ1TFGTU
Rozdział 4.   Optymalizacja zapytań           141


 9*'4' %WUVQOGT+  (4#0-
 )1
 5VOV6GZV
 
    ^%NWUVGTGF +PFGZ 5ECP
1$,'%6
=0QTVJYKPF?=FDQ?=1TFGTU?=2-A1TFGTU?
      9*'4'
=1TFGTU?=%WUVQOGT+?%QPXGTV
=?
 
 TQY
U CHHGEVGF
 6CDNG 1TFGTU  5ECP EQWPV  NQIKECN TGCFU  RJ[UKECN TGCFU  TGCFCJGCF TGCFU 

Wykonanie zapytania według wybranego przez optymalizator planu wymagało odczy-
tania 21 stron danych. Przekonajmy się, czy próba wymuszenia u ycia indeksu powią-
zanego z kolumną %WUVQOGT+ poprawi wydajność:
 75' 0QTVJYKPF
 5'.'%6
(41/ FDQ1TFGTU 
+0':  %WUVQOGT+
 9*'4' %WUVQOGT+  (4#0-
 )1
 5VOV6GZV
 
    ^$QQMOCTM .QQMWR
$11-/#4-
=$OM? 1$,'%6
=0QTVJYKPF?=FDQ?=1TFGTU?
         ^+PFGZ 5GGM
1$,'%6
=0QTVJYKPF?=FDQ?=1TFGTU?=%WUVQOGT+?
           5''-
=1TFGTU?=%WUVQOGT+? (4#0-  14'4' (149#4
 
 TQY
U CHHGEVGF
 6CDNG 1TFGTU  5ECP EQWPV  NQIKECN TGCFU  RJ[UKECN TGCFU  TGCFCJGCF TGCFU 

Jak widać, optymalizator właściwie oszacował liczbę operacji wejścia-wyjścia i wybrał
optymalny plan wykonania zapytania. Je eli któryś z Czytelników udokumentuje i prześle
do firmy Microsoft informację o tym, e wystąpił przypadek, w którym optymalizator
podjął błędną decyzję, będzie to podstawą do poprawienia kodu programu i (czasami)
do nagrodzenia u ytkownika.

Wróćmy do porównania planu wykonania zapytania z operatorem 5#4) z planem wyko-
nania zapytania zwracającego te same dane, ale niewykorzystującego operatora 5#4):
 75' 0QTVJYKPF
 5'.'%6
(41/ FDQ1TFGTU
 9*'4' %WUVQOGT+ .+-' 4154
 )1
 5VOV6GZV
 
    ^%NWUVGTGF +PFGZ 5ECP
1$,'%6
=0QTVJYKPF?=FDQ?=1TFGTU?=2-A1TFGTU?
      9*'4'
NKMG
=1TFGTU?=%WUVQOGT+? 4154 

 
 TQY
U CHHGEVGF
 6CDNG 1TFGTU  5ECP EQWPV  NQIKECN TGCFU  RJ[UKECN TGCFU  TGCFCJGCF TGCFU 
 53. 5GTXGT 'ZGEWVKQP 6KOGU
    %27 VKOG   OU GNCRUGF VKOG   OU
 53. 5GTXGT RCTUG CPF EQORKNG VKOG
    %27 VKOG   OU GNCRUGF VKOG   OU

    Jeżeli czas wykonania zapytania jest tak krótki, że Query Optimizer szacuje go na
    0 milisekund, informacja ta nie jest zamieszczana w książce.
142   Część I     Język Transact-SQL


      Poniewa na podstawie warunku %WUVQOGT+ .+-' 4154 niemo liwe jest oszacowanie
      liczby spełniających go stron (argument nie jest argumentem 5#4)), SQL Server zdecy-
      dował się na „pewniejszą” opcję i wybrał odczytanie indeksu grupującego.

Zapytania z operatorem AND
      Zapytania wykorzystujące koniunkcję kilku warunków logicznych przetwarzane są na-
      stępująco:
       1. W pierwszej kolejności Query Optimizer zwraca wszystkie wiersze spełniające
          poszczególne kryteria wymienione w klauzuli 9*'4';
       2. Z otrzymanego zbioru kolejno usuwane są wiersze niespełniające kolejnych
          warunków.

      Podczas przetwarzania zapytań tego typu Query Optimizer:
       1. Wykorzysta wszelkie dostępne indeksy zawierające dane wymienione w klauzuli
          9*'4'. W przypadku ich braku przeszukana zostanie cała tabela zwierająca
          odpowiednie dane.
       2. Mo e wykorzystać ró ne indeksy, o ile ka dy z nich zawiera fragment danych
          wymienionych w klauzuli 9*'4'.

      Największy wzrost wydajności dla zapytań tego typu uzyskamy, tworząc co najmniej jeden
      indeks zawierający dane o silnie zró nicowanych (najlepiej unikalnych) wartościach
      (a więc np. wielkość zamówienia, a nie identyfikatory dostawców, których w przykła-
      dowej bazie jest kilkunastu, a ka dy z nich składa wiele zamówień ró nej wielkości), do
      których odwołują się warunki z klauzuli 9*'4'.

      Przykład:

      Utworzymy kopię tabeli 1TFGT GVCKNU i wybierzemy z niej dane spełniające koniunkcje
      dwóch warunków logicznych. Następnie utworzymy dla naszej tabeli indeks zawierający
      dane z obu kolumn wymienionych w klauzuli 9*'4' i ponownie wykonamy zapytanie.
       75' 0QTVJYKPF
       5'.'%6
+061 FDQQF
       (41/ FDQ=1TFGT GVCKNU?
       )1
       5'6 56#6+56+%5 6+/' 10
       5'6 56#6+56+%5 +1 10
       )1
       5'.'%6
(41/ FDQQF
       9*'4' 7PKV2TKEG  #0 3WCPVKV[
       )1
       6CDNG QF  5ECP EQWPV  NQIKECN TGCFU  RJ[UKECN TGCFU  TGCFCJGCF TGCFU 
       53. 5GTXGT 'ZGEWVKQP 6KOGU
          %27 VKOG   OU GNCRUGF VKOG   OU

       %4'#6' +0': KAQF
       10 FDQQF 
7PKV2TKEG 3WCPVKV[
Rozdział 4.   Optymalizacja zapytań         143


      )1
      5'.'%6
(41/ FDQQF
      9*'4' 7PKV2TKEG  #0 3WCPVKV[
      )1
      6CDNG QF  5ECP EQWPV  NQIKECN TGCFU  RJ[UKECN TGCFU  TGCFCJGCF TGCFU 
      53. 5GTXGT 'ZGEWVKQP 6KOGU
         %27 VKOG   OU GNCRUGF VKOG   OU

     Pomimo tego, e nie utworzyliśmy indeksu zawierającego zapytanie, liczba odczytanych
     stron danych zmniejszyła się o połowę, chocia tabela zawierająca najwięcej rekordów
     ze wszystkich tabel bazy 0QTVJYKPF, liczy jedynie nieco ponad 2000 rekordów.


Zapytania z operatorem OR
     Zapytania wykorzystujące alternatywy kilku warunków logicznych przetwarzane są na-
     stępująco:
      1. W pierwszej kolejności Query Optimizer zwraca wszystkie wiersze spełniające
         poszczególne kryteria wymienione w klauzuli 9*'4'.
      2. Do otrzymanego zbioru kolejno dodawane są wiersze niespełniające wcześniejszych
         warunków.

     Podczas przetwarzania zapytań tego typu Query Optimizer:
      1. Wykorzysta wszelkie dostępne indeksy zawierające wszystkie lub część danych
         wymienionych w klauzuli 9*'4'. W przypadku braku niegrupującego indeksu
         powiązanego z choćby jednym warunkiem logicznym przeszukana zostanie cała
         tabela zawierająca odpowiednie dane;
      2. Mo e wykorzystać ró ne indeksy, o ile ka dy z nich zawiera fragment danych
         wymienionych w klauzuli 9*'4'.

         Operator +0 na etapie standaryzacji jest przekształcany na odpowiadające mu wyrażenie
         z operatorami 14 — zapytania z tym operatorem są przetwarzane w ten sam sposób
         co zapytania z operatorem 14.

     W wypadku zapytań z operatorem 14 istnienie indeksów zawierających wszystkie dane
     wymienione w klauzuli 9*'4' zapobiegnie (z wyjątkiem sytuacji, w której tabela przecho-
     wująca dane jest na tyle mała, e taniej jest odczytać wszystkie strony danych przechowu-
     jące dane z tabeli ni wybierać na podstawie odczytanych indeksów) przeszukaniu całej
     tabeli oraz zmniejszy liczbę operacji arytmetycznych związanych z sortowaniem i po-
     równywaniem danych.

     Przykład:
      75' 0QTVJYKPF
      412 6#$.' FDQQF LG GNK RT[M CFQYC VCDGNK KUVPKGLG WUWYCO[ Læ
      5'.'%6
+061 FDQQF
      (41/ FDQ=1TFGT GVCKNU?
      %4'#6' +0': KAQFWR
144   Część I   Język Transact-SQL


       10 FDQQF 
7PKV2TKEG
       )1
       5'6 56#6+56+%5 6+/' 10
       5'6 56#6+56+%5 +1 10
       )1
       5'.'%6
(41/ FDQQF
       9*'4' 7PKV2TKEG  14 3WCPVKV[
       )1
       6CDNG QF  5ECP EQWPV  NQIKECN TGCFU  RJ[UKECN TGCFU  TGCFCJGCF TGCFU 
       53. 5GTXGT 'ZGEWVKQP 6KOGU
          %27 VKOG   OU GNCRUGF VKOG   OU

      Wyświetlmy jeszcze plan wykonania instrukcji:
       5VOV6GZV
       
         ^6CDNG 5ECP
1$,'%6
=0QTVJYKPF?=FDQ?=QF? 9*'4'
=QF?=7PKV2TKEG?  14
           =QF?=3WCPVKV[?

      Jak widać, optymalizator przeszukał całą tabelę pomimo tego, e istniał indeks powią-
      zany z danymi wykorzystywanymi w jednym z warunków logicznych. Dodajmy teraz
      indeks powiązany z drugą tabelą przechowującą dane. na podstawie których wybierany
      jest wynik zapytania i ponownie wyświetlmy statystyki i plan wykonania instrukcji:
       %4'#6' +0': KAQFS
       10 FDQQF 
3WCPVKV[
       )1
       5'.'%6
(41/ FDQQF
       9*'4' 7PKV2TKEG  14 3WCPVKV[
       )1
       6CDNG QF  5ECP EQWPV  NQIKECN TGCFU  RJ[UKECN TGCFU  TGCFCJGCF TGCFU 
       53. 5GTXGT 'ZGEWVKQP 6KOGU
          %27 VKOG   OU GNCRUGF VKOG   OU

      Liczba odczytanych stron danych się nie zmieniła, co sugeruje, e i tym razem przeszu-
      kana została cała tabela. Czas wykonania instrukcji wyraźnie się skrócił, w przeciwień-
      stwie do czasu jej przetworzenia, co sugeruje, e optymalizator tym razem był w stanie
      opracować bardziej wydajny, choć nieco bardziej skomplikowany, plan jej wykonania:
       5VOV6GZV
       
         ^6CDNG 5ECP
1$,'%6
=0QTVJYKPF?=FDQ?=QF? 9*'4'
=QF?=7PKV2TKEG?  14
           =QF?=3WCPVKV[?

      Poniewa tabela od jest niewielka (mieści się na 10 stronach pamięci) i tym razem opty-
      malizator zdecydował się na przeszukanie wszystkich jej wierszy. Mimo to czas wyko-
      nania zapytania uległ skróceniu.


Zapytania pobierające dane z kilku źródeł danych
      Je eli zapytanie odwołuje się do kilku tabel lub widoków, pierwszą wartością, którą
      oszacuje optymalizator jest liczba wierszy zwróconych w wyniku złączenia obiektów
      źródłowych. Liczba ta zale y odwrotnie proporcjonalnie od unikalności wartości danych

Weitere ähnliche Inhalte

Was ist angesagt?

MySQL. Opis języka
MySQL. Opis językaMySQL. Opis języka
MySQL. Opis języka
Wydawnictwo Helion
 
MySQL
MySQLMySQL
Oracle. Projektowanie rozproszonych baz danych
Oracle. Projektowanie rozproszonych baz danychOracle. Projektowanie rozproszonych baz danych
Oracle. Projektowanie rozproszonych baz danych
Wydawnictwo Helion
 
100 sposobów na Access
100 sposobów na Access100 sposobów na Access
100 sposobów na Access
Wydawnictwo Helion
 
Projektowanie baz danych XML. Vademecum profesjonalisty
Projektowanie baz danych XML. Vademecum profesjonalistyProjektowanie baz danych XML. Vademecum profesjonalisty
Projektowanie baz danych XML. Vademecum profesjonalisty
Wydawnictwo Helion
 
JSP i XML
JSP i XMLJSP i XML

Was ist angesagt? (8)

MySQL. Opis języka
MySQL. Opis językaMySQL. Opis języka
MySQL. Opis języka
 
MySQL
MySQLMySQL
MySQL
 
Oracle. Projektowanie rozproszonych baz danych
Oracle. Projektowanie rozproszonych baz danychOracle. Projektowanie rozproszonych baz danych
Oracle. Projektowanie rozproszonych baz danych
 
Windows Server 2003. Podręcznik administratora
Windows Server 2003. Podręcznik administratoraWindows Server 2003. Podręcznik administratora
Windows Server 2003. Podręcznik administratora
 
100 sposobów na Access
100 sposobów na Access100 sposobów na Access
100 sposobów na Access
 
Projektowanie baz danych XML. Vademecum profesjonalisty
Projektowanie baz danych XML. Vademecum profesjonalistyProjektowanie baz danych XML. Vademecum profesjonalisty
Projektowanie baz danych XML. Vademecum profesjonalisty
 
JSP i XML
JSP i XMLJSP i XML
JSP i XML
 
Maintenance_Plans_Zupełnie_Znienacka
Maintenance_Plans_Zupełnie_ZnienackaMaintenance_Plans_Zupełnie_Znienacka
Maintenance_Plans_Zupełnie_Znienacka
 

Ähnlich wie Transact-SQL. Czarna księga

SQL. Optymalizacja
SQL. OptymalizacjaSQL. Optymalizacja
SQL. Optymalizacja
Wydawnictwo Helion
 
Oracle9i. Programowanie w języku PL/SQL
Oracle9i. Programowanie w języku PL/SQLOracle9i. Programowanie w języku PL/SQL
Oracle9i. Programowanie w języku PL/SQL
Wydawnictwo Helion
 
SQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystkoSQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystko
Wydawnictwo Helion
 
Oracle8. Programowanie w języku PL/SQL
Oracle8. Programowanie w języku PL/SQLOracle8. Programowanie w języku PL/SQL
Oracle8. Programowanie w języku PL/SQL
Wydawnictwo Helion
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
Wydawnictwo Helion
 
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaJava. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Wydawnictwo Helion
 
Microsoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programistyMicrosoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programisty
Wydawnictwo Helion
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery Windows
Wydawnictwo Helion
 
Access 2007 PL. Kurs
Access 2007 PL. KursAccess 2007 PL. Kurs
Access 2007 PL. Kurs
Wydawnictwo Helion
 
Access 2003 PL. Kurs
Access 2003 PL. KursAccess 2003 PL. Kurs
Access 2003 PL. Kurs
Wydawnictwo Helion
 
Praktyczny kurs SQL
Praktyczny kurs SQLPraktyczny kurs SQL
Praktyczny kurs SQL
Wydawnictwo Helion
 
SQL w mgnieniu oka
SQL w mgnieniu okaSQL w mgnieniu oka
SQL w mgnieniu oka
Wydawnictwo Helion
 
Wprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danychWprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danych
Wydawnictwo Helion
 
SQL. Ćwiczenia praktyczne
SQL. Ćwiczenia praktyczneSQL. Ćwiczenia praktyczne
SQL. Ćwiczenia praktyczne
Wydawnictwo Helion
 
SQL Server 2005
SQL Server 2005SQL Server 2005
SQL Server 2005
Wydawnictwo Helion
 
Oracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danychOracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danych
Wydawnictwo Helion
 

Ähnlich wie Transact-SQL. Czarna księga (20)

SQL. Optymalizacja
SQL. OptymalizacjaSQL. Optymalizacja
SQL. Optymalizacja
 
Oracle9i. Programowanie w języku PL/SQL
Oracle9i. Programowanie w języku PL/SQLOracle9i. Programowanie w języku PL/SQL
Oracle9i. Programowanie w języku PL/SQL
 
SQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystkoSQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystko
 
Oracle8. Programowanie w języku PL/SQL
Oracle8. Programowanie w języku PL/SQLOracle8. Programowanie w języku PL/SQL
Oracle8. Programowanie w języku PL/SQL
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
 
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaJava. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
 
Microsoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programistyMicrosoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programisty
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery Windows
 
SQL. Szybki start
SQL. Szybki startSQL. Szybki start
SQL. Szybki start
 
Access 2007 PL. Kurs
Access 2007 PL. KursAccess 2007 PL. Kurs
Access 2007 PL. Kurs
 
Access 2003 PL. Kurs
Access 2003 PL. KursAccess 2003 PL. Kurs
Access 2003 PL. Kurs
 
Praktyczny kurs SQL
Praktyczny kurs SQLPraktyczny kurs SQL
Praktyczny kurs SQL
 
Projektowanie struktur Active Directory
Projektowanie struktur Active DirectoryProjektowanie struktur Active Directory
Projektowanie struktur Active Directory
 
SQL w mgnieniu oka
SQL w mgnieniu okaSQL w mgnieniu oka
SQL w mgnieniu oka
 
Roman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychRoman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danych
 
Wprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danychWprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danych
 
SQL. Ćwiczenia praktyczne
SQL. Ćwiczenia praktyczneSQL. Ćwiczenia praktyczne
SQL. Ćwiczenia praktyczne
 
SQL Server 2005
SQL Server 2005SQL Server 2005
SQL Server 2005
 
Oracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstawOracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstaw
 
Oracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danychOracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danych
 

Mehr von Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
Wydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
Wydawnictwo Helion
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
Wydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Wydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
Wydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Wydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Wydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
Wydawnictwo Helion
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
Wydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
Wydawnictwo Helion
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
Wydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
Wydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
Wydawnictwo Helion
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
Wydawnictwo Helion
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
Wydawnictwo Helion
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
Wydawnictwo Helion
 

Mehr von Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Transact-SQL. Czarna księga

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI Transact-SQL. Czarna ksiêga KATALOG KSI¥¯EK Autor: Marcin Szeliga KATALOG ONLINE ISBN: 83-7361-125-8 Format: B5, stron: 492 ZAMÓW DRUKOWANY KATALOG Przyk³ady na ftp: 65 kB TWÓJ KOSZYK Transact-SQL to podstawowy jêzyk programowania baz danych w rodowisku MS SQL Server. Transact-SQL jest zmodyfikowan¹ i uzupe³nion¹ o elementy typowe dla DODAJ DO KOSZYKA proceduralnych jêzyków programowania (jak zmienne i instrukcje steruj¹ce wykonaniem programu) wersj¹ standardu SQL-92. Dziêki temu rozszerzeniu, jego mo¿liwo ci s¹ znacznie wiêksze ni¿ mo¿liwo ci standardowego SQL-a. CENNIK I INFORMACJE SQL Server zosta³ wyposa¿ony w intuicyjne, a zarazem potê¿ne narzêdzie administracyjne — konsolê SQL Server Enterprise Menager. W rezultacie czê æ ZAMÓW INFORMACJE administratorów SQL Servera nie zna albo nie korzysta z mo¿liwo ci jêzyka Transact- O NOWO CIACH -SQL. A okazuje siê, ¿e ta sama operacja mo¿e byæ przeprowadzona kilkukrotnie szybciej, je¿eli zamiast konsoli u¿yjemy Transact-SQLa. ZAMÓW CENNIK Ksi¹¿ka „Transact-SQL. Czarna Ksiêga” to wyczerpuj¹ce i dog³êbne kompendium omawiaj¹ce nie tylko sam jêzyk Transact-SQL, ale równie¿ zasady projektowania baz danych, a tak¿e zarz¹dzanie SQL Serverem za pomoc¹ jêzyka Transact-SQL. CZYTELNIA Przedstawiono: FRAGMENTY KSI¥¯EK ONLINE • Standardowe interfejsy jêzyka SQL instalowane wraz z SQL Serverem • Elementy jêzyka Transact-SQL i sk³adniê poszczególnych instrukcji jêzyka wraz z praktycznymi przyk³adami ich wykorzystania • Metody pobierania i modyfikowania danych • Optymalizacjê zapytañ • Wyszukiwanie pe³notekstowe i us³uga MS Search. • Zasady projektowania relacyjnych baz danych • Algorytmy przekszta³cania relacji poprzez kolejne postacie normalne • Tworzenie, modyfikowanie i usuwanie wszystkich typów obiektów bazodanowych • Bezpieczeñstwo i kontrolowanie dostêpu do danych • Integracjê SQL Servera z innymi serwerami firmy Microsoft • Tworzenie i przywracanie kopii zapasowych Wydawnictwo Helion • Automatyzacjê czynno ci administracyjnych ul. Chopina 6 • Monitorowanie pracy SQL Servera i optymalizacjê jego wydajno ci 44-100 Gliwice • £¹czenie serwerów bazodanowych tel. (32)230-98-63 • Replikacjê danych pomiêdzy wieloma SZBD e-mail: helion@helion.pl
  • 2. Spis treści Wstęp .................................................................................................................11 Część I Język Transact-SQL ......................................................................15 Rozdział 1. Interfejsy języka Transact-SQL ............................................................17 SQL Query Analyzer ...................................................................................................................... 18 Uruchamianie programu............................................................................................................ 19 Praca z programem................................................................................................................... 19 OSQL ........................................................................................................................................... 24 Uruchamianie programu............................................................................................................ 25 Praca z programem................................................................................................................... 25 BCP.............................................................................................................................................. 26 Uruchomienie programu............................................................................................................ 26 Praca z programem................................................................................................................... 26 TEXTCOPY.................................................................................................................................. 27 Uruchomienie programu............................................................................................................ 27 Praca z programem................................................................................................................... 27 Oprogramowanie dodatkowe........................................................................................................... 28 T-SQLEditPro ......................................................................................................................... 28 SQL Editor .............................................................................................................................. 28 Rozdział 2. Leksykon języka Transact-SQL ............................................................29 Standardy SQL i historia ich powstania ............................................................................................ 29 Typy instrukcji języka Transact-SQL............................................................................................... 31 Instrukcje DDL ........................................................................................................................ 32 Instrukcje DML ....................................................................................................................... 32 Instrukcje DCL ........................................................................................................................ 33 Znaczniki języka ............................................................................................................................ 33 Dyrektywy wsadowe ................................................................................................................ 33 Komentarze ............................................................................................................................. 36 Identyfikatory .......................................................................................................................... 36 Typy danych............................................................................................................................ 37 Zmienne .................................................................................................................................. 41 Funkcje ................................................................................................................................... 44 Operatory ................................................................................................................................ 92 Wyra enia ............................................................................................................................... 94 Znaczniki sterujące wykonaniem programu................................................................................. 94 Słowa kluczowe ....................................................................................................................... 96 Rozdział 3. Pobieranie danych ..............................................................................97 Przetwarzanie zapytań przez SQL Server ......................................................................................... 97 Instrukcja SELECT ........................................................................................................................ 98 Zwracanie określonej liczby wierszy ........................................................................................ 100 Klauzula FROM..................................................................................................................... 101 Łączenie wielu obiektów......................................................................................................... 103
  • 3. 4 Transact-SQL. Czarna księga Klauzula WHERE .................................................................................................................. 107 Klauzula ORDER BY............................................................................................................. 111 Klauzula GROUP BY............................................................................................................. 113 Klauzula HAVING ................................................................................................................. 116 Klauzule COMPUTE i COMPUTE BY.................................................................................... 116 Klauzula OPTION.................................................................................................................. 118 Klauzula FOR ........................................................................................................................ 119 Klauzula INTO ...................................................................................................................... 120 Podzapytania ............................................................................................................................... 121 Podzapytania jako źródła danych ............................................................................................. 121 Podzapytania jako wyra enia................................................................................................... 121 Podzapytania powiązane ......................................................................................................... 122 Podzapytanie jako złączenie .................................................................................................... 123 Podzapytania z operatorem EXISTS ........................................................................................ 124 Kursory....................................................................................................................................... 125 Deklarowanie kursora ............................................................................................................. 125 Typy kursorów....................................................................................................................... 126 Blokady................................................................................................................................. 127 Pobieranie danych .................................................................................................................. 127 Opcje kursora ........................................................................................................................ 128 Usuwanie kursora................................................................................................................... 130 Rozdział 4. Optymalizacja zapytań ......................................................................133 Query Optimizer .......................................................................................................................... 133 Plan wykonania zapytania ............................................................................................................. 135 Indeksy zawierające zapytania....................................................................................................... 138 Analiza zapytań ........................................................................................................................... 139 SARG ................................................................................................................................... 139 Zapytania z operatorem AND .................................................................................................. 142 Zapytania z operatorem OR..................................................................................................... 143 Zapytania pobierające dane z kilku źródeł danych ..................................................................... 144 Zapytania grupujące dane........................................................................................................ 152 Rozdział 5. Wyszukiwanie pełnotekstowe............................................................155 Usługa Microsoft Search............................................................................................................... 155 Indeksy wyszukiwania pełnotekstowego......................................................................................... 156 Procedury systemowe związane z usługą Microsoft Serach ........................................................ 156 Funkcje języka Transact-SQL związane z usługą Microsoft Search............................................. 157 Zapytania pełnotekstowe............................................................................................................... 159 Predykat CONTAINS ............................................................................................................. 159 Predykat FREETEXT ............................................................................................................. 161 Funkcja CONTAINSTABLE................................................................................................... 161 Funkcja FREETEXTTABLE................................................................................................... 162 Rozdział 6. Modyfikowanie danych .....................................................................165 Przetwarzanie transakcyjne ........................................................................................................... 165 Wstawianie danych ...................................................................................................................... 167 Instrukcja INSERT................................................................................................................. 167 Usuwanie danych ......................................................................................................................... 171 Instrukcja DELETE................................................................................................................ 171 Instrukcja TRUNCATE .......................................................................................................... 173 Aktualizowane danych.................................................................................................................. 174 Instrukcja UPDATE ............................................................................................................... 174
  • 4. Spis treści 5 Część II Projektowanie i programowanie baz danych.................................. 177 Rozdział 7. Projektowanie relacyjnych baz danych...............................................179 Model relacyjnych baz danych ...................................................................................................... 179 Zasady dotyczące struktury danych.......................................................................................... 182 Zasady dotyczące przetwarzania danych................................................................................... 182 Zasady dotyczące integralności danych .................................................................................... 188 Diagram związków E/R ................................................................................................................ 193 Określanie typów obiektów ..................................................................................................... 193 Określanie atrybutów obiektów poszczególnych typów.............................................................. 194 Wyodrębnianie danych elementarnych ..................................................................................... 194 Określanie zale ności funkcyjnych zachodzących pomiędzy atrybutami...................................... 195 Grupowanie danych w tabelach ............................................................................................... 196 Określanie związków (relacji) zachodzących między encjami..................................................... 198 Normalizacja ............................................................................................................................... 200 Pierwsza postać normalna 1PN................................................................................................ 200 Pierwsza postać anormalna...................................................................................................... 200 Druga postać normalna 2PN.................................................................................................... 206 Trzecia postać normalna 3PN .................................................................................................. 207 Algorytmy sprowadzania relacji do wy szej postaci normalnej ................................................... 208 Postać normalna Boyce’a-Codda ............................................................................................. 213 Rozdział 8. Bazy danych.....................................................................................215 Konwencja nazewnicza................................................................................................................. 215 Fizyczna struktura bazy danych..................................................................................................... 215 Dziennik transakcyjny ............................................................................................................ 216 Struktura plików bazodanowych .............................................................................................. 217 Struktura wiersza danych ........................................................................................................ 218 Tworzenie baz danych.................................................................................................................. 219 Instrukcja CREATE DATABASE............................................................................................ 220 Opcje baz danych................................................................................................................... 222 Modyfikacja baz danych ............................................................................................................... 228 Instrukcja ALTER DATABASE .............................................................................................. 228 Zwiększanie rozmiaru plików bazy danych............................................................................... 229 Zmniejszanie rozmiaru plików bazy danych.............................................................................. 230 Usuwanie baz danych ................................................................................................................... 233 Instrukcja DROP DATABASE ................................................................................................ 233 Grupy plików............................................................................................................................... 233 Rozdział 9. Tabele..............................................................................................237 Typy danych u ytkownika ............................................................................................................ 237 Procedura systemowa sp_addtype............................................................................................ 237 Procedura systemowa sp_droptype .......................................................................................... 238 Instrukcja CREATE TABLE......................................................................................................... 238 Przechowywanie wartości obliczonych na podstawie innych wartości ......................................... 240 Opcje tabel .................................................................................................................................. 242 Opcje zawę eń....................................................................................................................... 244 Atrybuty rozszerzone.................................................................................................................... 245 Procedura sp_addextendedproperty .......................................................................................... 245 Odczytywanie wartości atrybutów rozszerzonych...................................................................... 246 Procedura sp_updateextendedproperty...................................................................................... 247 Procedura sp_dropextendedproperty......................................................................................... 247 Instrukcja ALTER TABLE ........................................................................................................... 248 Zmiana nazwy tabeli............................................................................................................... 249 Instrukcja DROP TABLE ............................................................................................................. 250
  • 5. 6 Transact-SQL. Czarna księga Rozdział 10. Indeksy ..........................................................................................251 Po co tworzyć indeksy? ................................................................................................................ 251 Typy indeksów ............................................................................................................................ 252 Indeksy grupujące .................................................................................................................. 252 Indeksy niegrupujące .............................................................................................................. 253 Indeksy kompozytowe ............................................................................................................ 253 Dla których kolumn tworzyć indeksy?............................................................................................ 254 Wpływ indeksów grupujących na sortowanie danych................................................................. 255 Wpływ indeksów niegrupujących na sortowanie danych ............................................................ 257 Wpływ indeksów na modyfikowanie danych............................................................................. 258 Wpływ indeksów na dodawanie danych.................................................................................... 261 Indeksy zawierające zapytanie ................................................................................................. 262 Instrukcja CREATE INDEX ......................................................................................................... 264 Współczynnik wypełnienia...................................................................................................... 266 Opcje indeksów ........................................................................................................................... 268 Instrukcja DROP INDEX ............................................................................................................. 269 Statystyki .................................................................................................................................... 270 Instrukcja CREATE STATISTICS .......................................................................................... 271 Instrukcja UPDATE STATISTICS .......................................................................................... 272 Instrukcja DROP STATISTICS............................................................................................... 272 Rozdział 11. Widoki............................................................................................273 Instrukcja CREATE VIEW ........................................................................................................... 273 Złączenie zewnętrzne w definicji widoków ............................................................................... 276 Uporządkowywanie danych poprzez widoki.............................................................................. 276 Opcje widoków............................................................................................................................ 277 Modyfikowanie danych poprzez widoki ......................................................................................... 279 Instrukcja ALTER VIEW ............................................................................................................. 280 Instrukcja DROP VIEW ............................................................................................................... 280 Rozdział 12. Procedury składowane....................................................................281 Przetwarzanie procedur przez SQL Server ..................................................................................... 282 Tworzenie ............................................................................................................................. 282 Wykonanie ............................................................................................................................ 282 Wywołanie ............................................................................................................................ 283 Konwencja nazewnicza procedur składowanych ............................................................................. 283 Instrukcja CREATE PROCEDURE............................................................................................... 284 Automatyczne uruchamianie procedur...................................................................................... 286 Zagnie d anie procedur .......................................................................................................... 287 Opcje procedur składowanych....................................................................................................... 287 Wykonywanie procedur składowanych........................................................................................... 288 Instrukcja ALTER PROCEDURE ................................................................................................. 289 Instrukcja DROP PROCEDURE ................................................................................................... 289 Rozdział 13. Wyzwalacze....................................................................................291 Wyzwalacze a zawę enia .............................................................................................................. 292 Typy wyzwalaczy ........................................................................................................................ 292 Wyzwalacze wywoływane wykonaniem instrukcji INSERT....................................................... 292 Wyzwalacze wywoływane wykonaniem instrukcji DELETE...................................................... 292 Wyzwalacze wywoływane wykonaniem instrukcji UPDATE ..................................................... 293 Instrukcja CREATE TRIGGER..................................................................................................... 293 Wyzwalacze a monitorowanie aktywności u ytkowników.......................................................... 295 Opcje wyzwalaczy ....................................................................................................................... 297 Instrukcja ALTER TRIGGER ....................................................................................................... 298 Instrukcja DROP TRIGGER ......................................................................................................... 299
  • 6. Spis treści 7 Rozdział 14. Funkcje użytkownika ......................................................................301 Typy funkcji u ytkownika............................................................................................................. 301 Instrukcja CREATE FUNCTION .................................................................................................. 301 Tworzenie funkcji powiązanych ze schematem bazy danych ...................................................... 305 Opcje funkcji ............................................................................................................................... 305 Instrukcja ALTER FUNCTION .................................................................................................... 306 Instrukcja DROP FUNCTION ...................................................................................................... 307 Część III Zarządzanie SQL Serverem za pomocą języka Transact-SQL........... 309 Rozdział 15. Microsoft SQL Server 2000.............................................................311 Usługi SQL Servera ..................................................................................................................... 311 Wymiana danych pomiędzy usługami MSSQLServer i SQLServerAgent .................................... 312 Instancje SQL Servera.................................................................................................................. 315 Bazy danych SQL Servera ............................................................................................................ 315 Rozdział 16. Bezpieczeństwo..............................................................................319 Model bezpieczeństwa SQL Servera .............................................................................................. 319 Tryb Windows NT/2000 ......................................................................................................... 320 Tryb mieszany ....................................................................................................................... 321 Delegacja uprawnień............................................................................................................... 322 Przedstawienie uprawnień ....................................................................................................... 323 Dostęp do baz danych............................................................................................................. 323 Zarządzanie dostępem do SQL Servera .......................................................................................... 323 Tworzenie loginów ................................................................................................................. 323 Opcje loginów........................................................................................................................ 326 Usuwanie loginów .................................................................................................................. 328 Zarządzanie uprawnieniami u ytkowników .................................................................................... 329 Zarządzanie dostępem do baz danych....................................................................................... 329 Role standardowe ................................................................................................................... 332 Role aplikacyjne..................................................................................................................... 338 Przypisywanie uprawnień u ytkownikom i rolom...................................................................... 340 Właściciel obiektu .................................................................................................................. 346 Ograniczanie uprawnień za pomocą widoków i procedur składowanych............................................ 347 Rozdział 17. Automatyzacja typowych zadań administracyjnych...........................349 Integracja SQL Servera z serwerem poczty elektronicznej................................................................ 349 Konfiguracja usług SQLAgentMail oraz SQL Mail.................................................................... 350 Procedury rozszerzone usługi SQL Mail ................................................................................... 350 Integracja SQL Servera z serwerem WWW ..................................................................................... 353 Konfiguracja katalogu wirtualnego........................................................................................... 353 Umieszczanie instrukcji języka Transact-SQL bezpośrednio w adresie URL................................ 354 Wykonywanie instrukcji zapisanych w szablonach XML ........................................................... 355 Wykonywanie zapytań typu XPATCH ..................................................................................... 356 Łączenie serwerów bazodanowych ................................................................................................ 356 Tworzenie powiązań między serwerami.................................................................................... 356 Zdalne wykonywanie instrukcji języka Transact-SQL ............................................................... 358 Usuwanie powiązań pomiędzy serwerami ................................................................................. 361 Operatorzy .................................................................................................................................. 362 Zadania ....................................................................................................................................... 365 Tworzenie zadań .................................................................................................................... 365 Tworzenie kroków zadania...................................................................................................... 368 Tworzenie harmonogramów wykonania zadań .......................................................................... 372 Wykonywanie zadań............................................................................................................... 375
  • 7. 8 Transact-SQL. Czarna księga Historia wykonania zadań ....................................................................................................... 376 Zadania wykonywane na wielu serwerach................................................................................. 378 Usuwanie zadań ..................................................................................................................... 381 Alarmy........................................................................................................................................ 382 Komunikaty błędów................................................................................................................ 383 Tworzenie alarmów ................................................................................................................ 385 Wywoływanie błędów u ytkownika ......................................................................................... 389 Alarmy wywoływane bie ącą wydajnością ............................................................................... 391 Usuwanie alarmów ................................................................................................................. 392 Rozdział 18. Tworzenie kopii zapasowych ...........................................................393 Kopie zapasowe ........................................................................................................................... 395 Kiedy tworzyć kopie zapasowe? .............................................................................................. 396 Urządzenia kopii zapasowych........................................................................................................ 398 Trwałe urządzenia kopii zapasowych ....................................................................................... 398 Tymczasowe urządzenia kopii zapasowych............................................................................... 399 Wykonywanie kopii zapasowych ................................................................................................... 400 Instrukcja BACKUP DATABASE ........................................................................................... 400 Instrukcja BACKUP LOG ...................................................................................................... 401 Pełna kopia bazy danych......................................................................................................... 402 Przyrostowa kopia bazy danych............................................................................................... 403 Kopia dziennika transakcyjnego............................................................................................... 404 Kopia plików lub grup plików ................................................................................................. 406 Strategie wykonywania kopii zapasowych ...................................................................................... 407 Strategia pełnych kopii bazy danych ........................................................................................ 407 Strategia pełnych kopii bazy danych i kopii dziennika transakcyjnego......................................... 407 Strategia przyrostowych kopii bazy danych .............................................................................. 408 Strategia kopii plików bazy danych.......................................................................................... 409 Rozdział 19. Odtwarzanie kopii zapasowych........................................................411 Proces odtwarzania spójności bazy danych ..................................................................................... 411 Przygotowanie do odtworzenia kopii zapasowej.............................................................................. 412 Weryfikacja kopii zapasowej ................................................................................................... 412 Ograniczenie dostępu do bazy danych...................................................................................... 414 Odtwarzanie kopii zapasowych...................................................................................................... 414 Instrukcja RESTORE DATABASE.......................................................................................... 415 Instrukcja RESTORE LOG ..................................................................................................... 416 Inicjowanie procesu odtwarzania spójność bazy danych............................................................. 417 Odtwarzanie pełnych kopii baz danych..................................................................................... 417 Odtwarzanie przyrostowych kopii baz danych........................................................................... 418 Odtwarzanie kopii dziennika transakcyjnego............................................................................. 418 Odtwarzanie systemowych baz danych .......................................................................................... 420 Co zrobić w przypadku braku kopii baz systemowych?.............................................................. 421 Co zrobić w przypadku posiadania aktualnych kopii baz systemowych?...................................... 422 Konfigurowanie serwera zapasowego............................................................................................. 423 Rozdział 20. Monitorowanie i optymalizacja pracy SQL Servera............................425 Optymalizacja wydajności systemu bazodanowego ......................................................................... 425 Zasoby komputera.................................................................................................................. 426 System operacyjny ................................................................................................................. 433 SQL Server............................................................................................................................ 435 Baza danych .......................................................................................................................... 437 Program kliencki .................................................................................................................... 442 Monitorowanie bie ącej aktywności u ytkowników ........................................................................ 443
  • 8. Spis treści 9 Rozdział 21. Replikacja baz danych ....................................................................447 Wstęp do replikacji....................................................................................................................... 447 Model wydawca — dystrybutor — subskrybent ........................................................................ 447 Publikacje.............................................................................................................................. 448 Synchronizowanie danych....................................................................................................... 448 Typy replikacji ....................................................................................................................... 449 Fizyczne modele replikacji ...................................................................................................... 450 Konfiguracja replikacji pomiędzy serwerami bazodanowymi ........................................................... 451 Wybór dystrybutora................................................................................................................ 452 Wybór wydawcy i subskrybenta .............................................................................................. 452 Agenci replikacji .......................................................................................................................... 452 Agent migawki....................................................................................................................... 452 Agent transakcji ..................................................................................................................... 453 Agent scalania........................................................................................................................ 454 Agent dystrybucji ................................................................................................................... 454 Agent kolejkowania ................................................................................................................ 454 Replikacja migawkowa ................................................................................................................. 455 Replikacja transakcyjna ................................................................................................................ 457 Replikacja scalana ........................................................................................................................ 460 Rozwiązywanie konfliktów ..................................................................................................... 461 Zarządzanie replikacjami .............................................................................................................. 462 Replikowanie definicji tabel .................................................................................................... 462 Replikowanie definicji widoków, funkcji i procedur .................................................................. 463 Sprawdzanie replikacji danych................................................................................................. 463 Dodatki ............................................................................................... 467 Skorowidz .........................................................................................................469
  • 9. Rozdział 4. Optymalizacja zapytań Zapytania, tak jak pozostałe instrukcje języka Transact-SQL, przed skompilowaniem i wy- konaniem są optymalizowane przez wewnętrzny proces SQL Servera o nazwie Query Optimizer. Jego zdaniem jest znalezienie najtańszego sposobu wykonania instrukcji. Query Optimizer bazuje na liczbie operacji wejścia-wyjścia oraz na liczbie obliczeń doko- nanych przez procesor niezbędnych do wykonania instrukcji. Query Optimizer szacuje koszt operacji wejścia-wyjścia na podstawie: 1. Struktury tabel przechowujących dane, do których odwołuje się instrukcja i istniejących, związanych z nimi indeksów. 2. Kosztu operacji złączenia ró nego typu danych zapisanych w kilku tabelach źródłowych. 3. Istniejących lub tworzonych dynamicznie przez Query Optimizera statystyk opisujących dane źródłowe. 4. Metainformacji opisujących fizyczną strukturę plików, w których zapisane są ądane dane. Ponieważ Query Optimizer oblicza koszt wykonania instrukcji na podstawie statystyk, nieaktualne lub nieadekwatne statystki spowodują utworzenie nieefektywnego planu jej wykonania. Mechanizm tworzenia i aktualizacji statystyk został opisany w rozdziale 10. Wynikiem optymalizacji jest znalezienie takiego sposobu wykonania instrukcji, który zwraca najmniejszą z mo liwych liczbę wierszy i w związku z tym wymaga odczytania najmniejszej liczby stron (8 KB spójnych bloków danych). Celem optymalizacji jest tak e znalezienie takiego wykonywania, którego całkowity czas przeprowadzania jest najkrótszy. Fizyczna struktura baz danych została opisana w znajdującym się w. części poświęconej projektowaniu i tworzeniu baz danych rozdziale 8. W rozdziale 10. znajdują się szczegółowe wskazówki dotyczące tworzenia i wykorzystywania indeksów w celu poprawy wydajności zapytań. Query Optimizer Optymalizacja instrukcji języka Transact-SQL przebiega według następującego schematu:
  • 10. 134 Część I Język Transact-SQL 1. Po sprawdzeniu poprawności syntaktycznej sprawdzana jest poprawność semantyczna (ang. Parse). Na tym etapie instrukcja zostanie „podzielona” na znaczniki interpretowane przez SQL Server. 2. Następuje standaryzacja — zapisanie znaczników instrukcji Transact-SQL w jednoznacznej postaci (np. ujednolicenie definiowania aliasów raz definiowanych za pomocą słowa kluczowego #5, raz bez niego). Na tym etapie wszystkie redundantne znaczniki instrukcji zostają usunięte. 3. Kolejnym etapem jest optymalizacja — wybór jednego z przygotowanych planów wykonania. Na tym etapie następuje analiza indeksów i statystyk oraz metod złączania danych. Etap mo na podzielić na trzy fazy: a. Analiza zapytania — wybór metod wyszukiwania i łączenia danych źródłowych mający na celu zminimalizowanie liczby danych, które muszą zostać odczytane do wykonania instrukcji. b. Wybór indeksów — na podstawie statystyk tabel i indeksów następuje wybór tych indeksów, do których odwołanie spowoduje zwrócenie najmniejszej liczby danych (minimalizacja liczby logicznych i fizycznych odczytów bloków danych). c. Wybór metody złączania tabel — na podstawie struktury i liczby danych oraz liczby pamięci operacyjnej niezbędnej do wykonania złączenia wybierany jest sposób złączania tabel. W tym momencie określone zostaje równie , która tabela będzie traktowana jako wewnętrzna, a która jako zewnętrzna, w przypadku złączenia poprzez pętlę wyszukiwania. 4. Następnie instrukcja wykonana według opracowanego optymalnego planu zostaje skompilowana. 5. Query Optimizer wybiera optymalny sposób pobrania wybranych (wynikowych) danych. Na przykład: czy odwołać się do indeksu, czy odczytać tabelę — wbrew pozorom dla małych tabel odczytanie całej ich zawartości okazuje się tańszym sposobem na odczytanie danych ni odwoływanie się do nich poprzez indeksy. Skompilowana według optymalnego planu instrukcja języka Transact-SQL zostaje zapisana w buforze procedury — przydzielonej przez SQL Server części pamięci operacyjnej wykorzystywanej wyłącznie do przechowywania skompilowanych procedur. W buforze procedury mogą być przechowywane maksymalnie dwie wersje skompilowanej instrukcji — jedna wykonywana równolegle, druga szeregowo. Poniewa w pamięci procedury zapisana zostaje wyłącznie instrukcja języka Transact-SQL, bez informacji o tym, który u ytkownik ją wykonał, odwołanie się do niej powoduje, e SQL Server musi wyznaczyć bie ący kontekst jej wykonania. Dlatego, je eli instrukcja zawiera wyłącznie identyfikatory obiektów, bez identyfikatora ich właściciela, SQL Server przyjmie, e właścicielem obiektów jest u ytkownik wykonujący instrukcję, a dopiero potem sprawdzi, czy obiekty nie nale ą do u ytkownika FDQ. Wynika z tego, e jawne odwoływanie się do obiektów za pomocą nazwy u ytkownika i nazwy obiektu przy- spiesza wykonanie skompilowanych instrukcji.
  • 11. Rozdział 4. Optymalizacja zapytań 135 Zoptymalizowana na podstawie nieaktualnych statystyk instrukcja nie będzie dłu ej wy- konywana według najlepszego planu. Równie , je eli zmieniła się struktura obiektów, do których odwoływała się instrukcja, próba wykonania tej instrukcji zakończy się błę- dem. Z tych powodów skompilowana instrukcja jest w zale ności od potrzeb rekom- pilowana. Ponowna kompilacja instrukcji jest przeprowadzana, je eli: 1. Zmieniona została definicja obiektu, do którego instrukcja się odwołuje (wykonano polecenie #.6'4). 2. Wymuszono aktualizacje statystyk, na podstawie których przygotowany został plan wykonania instrukcji (wykonano instrukcję 72&#6' 56#6+56+%). 3. Usunięto indeks wykorzystywany przez instrukcję (wykonano instrukcję &412 +0&':). 4. Z tabeli źródłowej usunięto lub dodano do niej du ą (względem stanu w momencie optymalizacji instrukcji) liczbę wierszy. 5. Wymuszono rekompilację instrukcji (wywołano procedurę systemową URATGEQORKNG). Plan wykonania zapytania Plan wykonania instrukcji można poznać odczytując zawartość tabeli systemowej U[UKPFGZGU. Jednak bezpośrednie odwoływanie się do tabel systemowych nie jest zalecane, a w tym przypadku istnieją inne sposoby uzyskania żądanych danych. Query Analyzer pozwala na wyświetlenie statystyk związanych z czasem (włączenie opcji 5'6 56#6+56+% 6+/') i liczbą operacji wejścia-wyjścia (opcja 5'6 56#6+56+% +1). Ponadto mo emy wyświetlić opracowany przez Query Optimizera plan wykonania instrukcji (opcja 5'6 5*192.#0 6':6 lub 5'6 5*192.#0A#..). Na przykład po włączeniu dwóch pierwszych opcji wykonanie poni szego zapytania spowoduje wyświetlenie poni szych informacji: 75' RWDU 5'.'%6 &+56+0%6 VV[RG (41/ VKVNGU #5 V +00'4 ,1+0 VKVNGU #5 V 10 VV[RG VV[RG 9*'4' VRWDAKF VRWDAKF )1 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU 53. 5GTXGT RCTUG CPF EQORKNG VKOG %27 VKOG OU GNCRUGF VKOG OU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU V[RG DWUKPGUU RU[EJQNQI[
  • 12. 136 Część I Język Transact-SQL TQY U CHHGEVGF 6CDNG VKVNGU 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU 53. 5GTXGT RCTUG CPF EQORKNG VKOG %27 VKOG OU GNCRUGF VKOG OU Natomiast włączenie opcji 5'6 5*192.#0 6':6 spowoduje wyświetlenie pokazanego w roz- dziale 3. planu wykonania instrukcji. Informacje na temat czasu wykonania poszczególnych opisanych wcześniej faz przetwa- rzania przez SQL Server instrukcji języka Transact-SQL nie wymagają komentarza. Przyj- rzyjmy się informacjom związanymi z liczbą operacji wejścia-wyjścia: 1. UECP EQWPV — określa liczbę odwołań do tabeli źródłowej. 2. NQIKECN TGCFU — określa liczbę stron danych odczytanych z pamięci podręcznej. 3. RJ[UKECN TGCFU — określa liczbę stron danych odczytanych z dysku. Ta liczba nigdy nie jest większa od liczby stron odczytanych z pamięci podręcznej. Na podstawie tych dwóch wartości mo na obliczyć współczynnik trafień: współczynnik trafień = (logical reads – physical reads) / logical reads 4. TGCFCJGCF TGCFU — określa liczbę stron umieszczoną w pamięci podręcznej. Sam plan wykonania instrukcji mo e równie zostać przedstawiony w postaci graficznej (rysunek 4.1). Zawarte są w nim informacje dotyczące następujących zagadnień: 1. Kroki wykonywania instrukcji i ich kolejność. 2. Logiczne operatory algebry zbiorów u yte podczas wykonywania instrukcji. 3. Fizyczna implementacja tych operatorów wykorzystana do wykonania zapytania (tabela 4.1). Rysunek 4.1. Plan wykonania zapytania
  • 13. Rozdział 4. Optymalizacja zapytań 137 Tabela 4.1. Lista operatorów fizycznych Symbol Znaczenie Opis Odczytanie indeksu Wyszukanie (na podstawie podanych warunków) danych z indeksu niegrupującego Pętla wyszukiwania Wyszukanie (z reguły w oparciu o indeks) w wewnętrznej tabeli złączenia wszystkich wierszy zgodnych z kolejnym wierszem zewnętrznej tabeli złączenia Porządkowanie danych Uporządkowanie wszystkich danych źródłowych Przeszukanie indeksu Wyszukanie w indeksie niegrupującym wierszy danych Przeszukanie tabeli Wyszukanie w tabeli danych spełniających podane kryteria Przeszukanie wskaźników Wyszukanie danych na podstawie identyfikatora wiersza lub klucza indeksu grupującego rekordy w tabeli lub w indeksie grupującym Wybieranie danych Wyszukanie w zbiorze danych źródłowych rekordów spełniających podane kryteria Zgodność funkcji skrótu Złączenie tabel na podstawie wyliczonej dla ka dego wiersza wartości funkcji skrótu Złączenie Dowolnego typu (z wyjątkiem złączenia tabeli z nią samą oraz złączenia krzy owego) złączenie tabel lub widoków Poszczególne kroki związane z wykonaniem instrukcji zapisywane są od strony prawej do lewej. W ramach ka dego kroku mo liwe jest wykonanie dowolnej liczby operacji — w tym przypadku odczytanie indeksów obu kolumn zostało wykonane jako jeden krok składający się z dwóch operacji. Związek pomiędzy poszczególnymi operacjami reprezentują strzałki. Ustawienie kursora na symbolu operatora fizycznego spowoduje wyświetlenie dodatkowych informacji o danej operacji (rysunek 4.2). Rysunek 4.2. Informacje o złączeniu tabel t1 i t2
  • 14. 138 Część I Język Transact-SQL Wyświetlając dodatkowe informacje o ka dej operacji poznamy: argumenty wywołania operacji (ang. Argument), koszt wykonania operacji i jego szacunkowy udział w koszcie wykonania instrukcji (ang. Cost), koszt wykonania operacji i operacji przez nią wywołanych (ang. Subtree cost), liczbę wykonania operacji w ramach instrukcji (ang. Number of executes), liczbę zwróconych przez operację wierszy (ang. Row count), szacunkową wielkość zwróconych przez operację wierszy (ang. Estimated row size), szacunkowy koszt operacji wejścia-wyjścia przeprowadzonych przez operację (ang. I/O cost), szacunkowy koszt wykorzystania zasobów procesora przez operację (ang. CPU cost). Indeksy zawierające zapytania Indeksy różnego typu i sposoby ich tworzenia zostały opisane w rozdziale 10. Optymalną pod względem szybkości odczytu danych jest sytuacja, w której wszystkie ądane dane (wyra enia wymienione w instrukcji 5'.'%6) mogą zostać odczytane z in- deksu. Mówimy wtedy, e indeks zawiera zapytanie. Aby indeks zawierał zapytanie, wszystkie dane źródłowe muszą być poindeksowane. Dotyczy to kolumn wymienionych w poleceniu 5'.'%6, w klauzuli 9*'4', )4172 $; i 14'4 $;. W takim przypadku pobranie danych sprowadza się do znalezienia i odczytania odpowiednich liści indeksu, bez koniecz- ności odczytywania stron zawierających dane. SQL Server pozwala na tworzenie indeksów dla danych będących wynikiem funkcji grupującej. Jeżeli zapytania dotyczą wyliczanych wartości utworzenie indeksów tego typu spowoduje wielokrotny wzrost wydajności zapytania, w ramach którego obliczane są te wartości. Sprawdzić, czy istnieje indeks zawierający zapytanie, mo emy wyświetlając graficzny plan jego wykonania, a następnie wyświetlając szczegóły operacji odczytania indeksu. Je eli znajduje się tam informacja: 5ECPPKPI C PQPENWUVGTGF KPFGZ GPVKTGN[ QT QPN[ C TCPIG oznacza to, e do wykonania zapytania wykorzystano wyłącznie dane przechowywane w niegrupującym indeksie (rysunek 4.3). Nie oznacza to, e najlepszym rozwiązaniem jest stworzenie indeksu zawierającego wszystkie kolumny wybranej tabeli — w takim przypadku utworzymy po prostu kopię tabeli i zamiast spodziewanego zysku wydajności uzyskamy jej spadek. Tworząc indeksy zawierające zapytania nale y wybierać wyłącznie kolumny często występujące w zapyta- niach i o podobnej wielkości (dodanie do indeksu zawierającego dane z trzech kolumn typu UOCNNKPV danych z kolumny typu XCTEJCT jest ekstremalnym przykładem źle zaprojektowanego indeksu).
  • 15. Rozdział 4. Optymalizacja zapytań 139 Rysunek 4.3. Odczytanie nazw poszczególnych kategorii z tabeli categories Niegrupujący indeks zawierający zapytanie jest funkcjonalnym odpowiednikiem indeksu grupującego i korzystanie z niego wiąże się z tymi samymi korzyściami — po znalezieniu pierwszej spełniającej podany warunek wartości nie potrzebne jest tworzenie wskaźników do zewnętrznych danych (tabeli), a ponieważ dane indeksu zapisane są w określonym porządku, wystarczy odczytać określoną liczbę stron przechowujących żądane dane. Analiza zapytań W zale ności od typu zapytania, wykorzystanych operatorów logicznych czy metod łączenia tabel, Query Optimizer posłu y się odmiennymi szablonami umo liwiającymi znalezienie optymalnego planu wykonania instrukcji. Znajomość tych szablonów jest niezbędna do tworzenia wydajnych zapytań. Aby wyniki uzyskane przez Czytelników nie różniły się od przedstawianych w książce przed wykonaniem opisywanych programów należy przywrócić oryginalną postać baz 0QTVJYKPF i RWDU. Można to osiągnąć zatrzymując SQL Server i nadpisując pliki .mdf i .ldf tych baz plikami znajdującymi się na płycie instalacyjnej serwera. SARG Akronim 5#4) (ang. Search ARGuments) określa pewien specjalny podzbiór argumentów wyszukiwania, czyli wyra eń wymienionych w klauzuli 9*'4' instrukcji 5'.'%6. Argu- menty 5#4) charakteryzuje: Obecność stałej, której wartość jest porównywana z polami wybranej kolumny tabeli źródłowej. Wyszukiwanie wartości równych wzorcowi, nale ących do zakresu wyznaczonego przez wzorzec lub przez połączenie kilku argumentów 5#4) za pomocą operatora koniunkcji. Wynika z tego, e dla argumentów 5#4) dopuszczalnymi operatorami są: , , , , , $'69''0 oraz, po spełnieniu dodatkowych warunków, .+-'. To, czy argument zawiera- jący operator .+-' mo e zostać uznany za argument 5#4), zale y od pozycji symbolu wieloznacznego ( ). Je eli występuje on jako ostatni znak wzorca, czyli mo liwe będzie
  • 16. 140 Część I Język Transact-SQL ograniczenie liczby stron, które SQL Server będzie musiał odczytać, aby znaleźć ądane wartości, to taki argument będzie argumentem 5#4). W przypadku u ycia operatora , 016, , , , 016 ':+565, 016 +0 czy 016 .+-' ko- nieczne okazuje się sprawdzenie wartości wszystkich wierszy tabeli źródłowej. Chocia nie oznacza to, e SQL Server nie potrafi skorzystać z indeksów przy tworzeniu planu zapytania zawierającego wy ej wymienione operatory, to nale y dą yć do zastąpienia takich operatorów argumentami 5#4). Wykonanie zapytania zawierającego argument 5#4) przebiega według następującego schematu: 1. Optymalizator sprawdza, czy istnieją przydatne do wykonania zapytania indeksy. 2. Je eli taki indeks zostanie znaleziony, rozpoczyna się wyszukiwanie (za pomocą operatora ) stron indeksu przechowujących dane zgodne z ądanym wzorcem. Domyślnie dane indeksów zapisane są na dysku w porządku rosnącym. 3. Wszystkie wartości spełniające zadane kryteria są odczytywane, a jeśli jest to konieczne, odczytywane są z tabeli wartości przechowywane w pozostałych polach danego wiersza. Porównajmy koszt i plan wykonania zapytania wykorzystującego argument 5#4) z zapy- taniem zwracającym ten sam wynik, ale niezawierającym argumentu 5#4): 75' 0QTVJYKPF 5'.'%6
  • 17. (41/ FDQ1TFGTU 9*'4' %WUVQOGT+ )4154 )1 5VOV6GZV ^$QQMOCTM .QQMWR $11-/#4- =$OM? 1$,'%6 =0QTVJYKPF?=FDQ?=1TFGTU? ^+PFGZ 5GGM 1$,'%6 =0QTVJYKPF?=FDQ?=1TFGTU?=%WUVQOGT+? 5''- =1TFGTU?=%WUVQOGT+?%QPXGTV =? 14'4' (149#4 TQY U CHHGEVGF 6CDNG 1TFGTU 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU Poniewa pobieramy wszystkie dane z wszystkich kolumn tabeli, optymalizator musi u yć wskaźnika do tabeli — utworzenie indeksu kompozytowego dla wszystkich kolumn tabeli spowodowałby jedynie pogorszenie wydajności. Jednak wybór wierszy spełniających zadane kryteria odbywa się poprzez odczytanie kolejnych liści indeksu, dzięki czemu SQL Server musi odczytać jedynie wybrane strony tabeli. Gdyby liczba odczytanych stron była stosunkowo du a, tak jak na przykład w przypadku klienta o identyfikatorze (4#0-, optymalizator zdecydowałby się na wykorzystanie indeksu grupującego i sprawdzanie warunku bezpośrednio na danych tabeli, bez wykorzystywania indeksu powiązanego z kolumną %WUVQOGT+: 75' 0QTVJYKPF 5'.'%6
  • 19. Rozdział 4. Optymalizacja zapytań 141 9*'4' %WUVQOGT+ (4#0- )1 5VOV6GZV ^%NWUVGTGF +PFGZ 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?=1TFGTU?=2-A1TFGTU? 9*'4' =1TFGTU?=%WUVQOGT+?%QPXGTV =? TQY U CHHGEVGF 6CDNG 1TFGTU 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU Wykonanie zapytania według wybranego przez optymalizator planu wymagało odczy- tania 21 stron danych. Przekonajmy się, czy próba wymuszenia u ycia indeksu powią- zanego z kolumną %WUVQOGT+ poprawi wydajność: 75' 0QTVJYKPF 5'.'%6
  • 20. (41/ FDQ1TFGTU +0': %WUVQOGT+ 9*'4' %WUVQOGT+ (4#0- )1 5VOV6GZV ^$QQMOCTM .QQMWR $11-/#4- =$OM? 1$,'%6 =0QTVJYKPF?=FDQ?=1TFGTU? ^+PFGZ 5GGM 1$,'%6 =0QTVJYKPF?=FDQ?=1TFGTU?=%WUVQOGT+? 5''- =1TFGTU?=%WUVQOGT+? (4#0- 14'4' (149#4 TQY U CHHGEVGF 6CDNG 1TFGTU 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU Jak widać, optymalizator właściwie oszacował liczbę operacji wejścia-wyjścia i wybrał optymalny plan wykonania zapytania. Je eli któryś z Czytelników udokumentuje i prześle do firmy Microsoft informację o tym, e wystąpił przypadek, w którym optymalizator podjął błędną decyzję, będzie to podstawą do poprawienia kodu programu i (czasami) do nagrodzenia u ytkownika. Wróćmy do porównania planu wykonania zapytania z operatorem 5#4) z planem wyko- nania zapytania zwracającego te same dane, ale niewykorzystującego operatora 5#4): 75' 0QTVJYKPF 5'.'%6
  • 21. (41/ FDQ1TFGTU 9*'4' %WUVQOGT+ .+-' 4154 )1 5VOV6GZV ^%NWUVGTGF +PFGZ 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?=1TFGTU?=2-A1TFGTU? 9*'4' NKMG =1TFGTU?=%WUVQOGT+? 4154 TQY U CHHGEVGF 6CDNG 1TFGTU 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU 53. 5GTXGT RCTUG CPF EQORKNG VKOG %27 VKOG OU GNCRUGF VKOG OU Jeżeli czas wykonania zapytania jest tak krótki, że Query Optimizer szacuje go na 0 milisekund, informacja ta nie jest zamieszczana w książce.
  • 22. 142 Część I Język Transact-SQL Poniewa na podstawie warunku %WUVQOGT+ .+-' 4154 niemo liwe jest oszacowanie liczby spełniających go stron (argument nie jest argumentem 5#4)), SQL Server zdecy- dował się na „pewniejszą” opcję i wybrał odczytanie indeksu grupującego. Zapytania z operatorem AND Zapytania wykorzystujące koniunkcję kilku warunków logicznych przetwarzane są na- stępująco: 1. W pierwszej kolejności Query Optimizer zwraca wszystkie wiersze spełniające poszczególne kryteria wymienione w klauzuli 9*'4'; 2. Z otrzymanego zbioru kolejno usuwane są wiersze niespełniające kolejnych warunków. Podczas przetwarzania zapytań tego typu Query Optimizer: 1. Wykorzysta wszelkie dostępne indeksy zawierające dane wymienione w klauzuli 9*'4'. W przypadku ich braku przeszukana zostanie cała tabela zwierająca odpowiednie dane. 2. Mo e wykorzystać ró ne indeksy, o ile ka dy z nich zawiera fragment danych wymienionych w klauzuli 9*'4'. Największy wzrost wydajności dla zapytań tego typu uzyskamy, tworząc co najmniej jeden indeks zawierający dane o silnie zró nicowanych (najlepiej unikalnych) wartościach (a więc np. wielkość zamówienia, a nie identyfikatory dostawców, których w przykła- dowej bazie jest kilkunastu, a ka dy z nich składa wiele zamówień ró nej wielkości), do których odwołują się warunki z klauzuli 9*'4'. Przykład: Utworzymy kopię tabeli 1TFGT GVCKNU i wybierzemy z niej dane spełniające koniunkcje dwóch warunków logicznych. Następnie utworzymy dla naszej tabeli indeks zawierający dane z obu kolumn wymienionych w klauzuli 9*'4' i ponownie wykonamy zapytanie. 75' 0QTVJYKPF 5'.'%6
  • 23. +061 FDQQF (41/ FDQ=1TFGT GVCKNU? )1 5'6 56#6+56+%5 6+/' 10 5'6 56#6+56+%5 +1 10 )1 5'.'%6
  • 24. (41/ FDQQF 9*'4' 7PKV2TKEG #0 3WCPVKV[ )1 6CDNG QF 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU %4'#6' +0': KAQF 10 FDQQF 7PKV2TKEG 3WCPVKV[
  • 25. Rozdział 4. Optymalizacja zapytań 143 )1 5'.'%6
  • 26. (41/ FDQQF 9*'4' 7PKV2TKEG #0 3WCPVKV[ )1 6CDNG QF 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU Pomimo tego, e nie utworzyliśmy indeksu zawierającego zapytanie, liczba odczytanych stron danych zmniejszyła się o połowę, chocia tabela zawierająca najwięcej rekordów ze wszystkich tabel bazy 0QTVJYKPF, liczy jedynie nieco ponad 2000 rekordów. Zapytania z operatorem OR Zapytania wykorzystujące alternatywy kilku warunków logicznych przetwarzane są na- stępująco: 1. W pierwszej kolejności Query Optimizer zwraca wszystkie wiersze spełniające poszczególne kryteria wymienione w klauzuli 9*'4'. 2. Do otrzymanego zbioru kolejno dodawane są wiersze niespełniające wcześniejszych warunków. Podczas przetwarzania zapytań tego typu Query Optimizer: 1. Wykorzysta wszelkie dostępne indeksy zawierające wszystkie lub część danych wymienionych w klauzuli 9*'4'. W przypadku braku niegrupującego indeksu powiązanego z choćby jednym warunkiem logicznym przeszukana zostanie cała tabela zawierająca odpowiednie dane; 2. Mo e wykorzystać ró ne indeksy, o ile ka dy z nich zawiera fragment danych wymienionych w klauzuli 9*'4'. Operator +0 na etapie standaryzacji jest przekształcany na odpowiadające mu wyrażenie z operatorami 14 — zapytania z tym operatorem są przetwarzane w ten sam sposób co zapytania z operatorem 14. W wypadku zapytań z operatorem 14 istnienie indeksów zawierających wszystkie dane wymienione w klauzuli 9*'4' zapobiegnie (z wyjątkiem sytuacji, w której tabela przecho- wująca dane jest na tyle mała, e taniej jest odczytać wszystkie strony danych przechowu- jące dane z tabeli ni wybierać na podstawie odczytanych indeksów) przeszukaniu całej tabeli oraz zmniejszy liczbę operacji arytmetycznych związanych z sortowaniem i po- równywaniem danych. Przykład: 75' 0QTVJYKPF 412 6#$.' FDQQF LG GNK RT[M CFQYC VCDGNK KUVPKGLG WUWYCO[ Læ 5'.'%6
  • 27. +061 FDQQF (41/ FDQ=1TFGT GVCKNU? %4'#6' +0': KAQFWR
  • 28. 144 Część I Język Transact-SQL 10 FDQQF 7PKV2TKEG )1 5'6 56#6+56+%5 6+/' 10 5'6 56#6+56+%5 +1 10 )1 5'.'%6
  • 29. (41/ FDQQF 9*'4' 7PKV2TKEG 14 3WCPVKV[ )1 6CDNG QF 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU Wyświetlmy jeszcze plan wykonania instrukcji: 5VOV6GZV ^6CDNG 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?=QF? 9*'4' =QF?=7PKV2TKEG? 14 =QF?=3WCPVKV[? Jak widać, optymalizator przeszukał całą tabelę pomimo tego, e istniał indeks powią- zany z danymi wykorzystywanymi w jednym z warunków logicznych. Dodajmy teraz indeks powiązany z drugą tabelą przechowującą dane. na podstawie których wybierany jest wynik zapytania i ponownie wyświetlmy statystyki i plan wykonania instrukcji: %4'#6' +0': KAQFS 10 FDQQF 3WCPVKV[ )1 5'.'%6
  • 30. (41/ FDQQF 9*'4' 7PKV2TKEG 14 3WCPVKV[ )1 6CDNG QF 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU Liczba odczytanych stron danych się nie zmieniła, co sugeruje, e i tym razem przeszu- kana została cała tabela. Czas wykonania instrukcji wyraźnie się skrócił, w przeciwień- stwie do czasu jej przetworzenia, co sugeruje, e optymalizator tym razem był w stanie opracować bardziej wydajny, choć nieco bardziej skomplikowany, plan jej wykonania: 5VOV6GZV ^6CDNG 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?=QF? 9*'4' =QF?=7PKV2TKEG? 14 =QF?=3WCPVKV[? Poniewa tabela od jest niewielka (mieści się na 10 stronach pamięci) i tym razem opty- malizator zdecydował się na przeszukanie wszystkich jej wierszy. Mimo to czas wyko- nania zapytania uległ skróceniu. Zapytania pobierające dane z kilku źródeł danych Je eli zapytanie odwołuje się do kilku tabel lub widoków, pierwszą wartością, którą oszacuje optymalizator jest liczba wierszy zwróconych w wyniku złączenia obiektów źródłowych. Liczba ta zale y odwrotnie proporcjonalnie od unikalności wartości danych
  • 31. Rozdział 4. Optymalizacja zapytań 145 wykorzystanych do złączenia obiektów (łącząc tabele za pomocą kolumn przechowujących dane np. o województwie otrzymamy (statystycznie) większy zbiór wynikowy ni łącząc tabele za pomocą kolumn przechowujących dane o adresie konkretnego dostawcy). Ponadto na podstawie szacunkowej ziarnistości danych optymalizator ocenia, ile danych zostanie zduplikowanych w wyniku złączenia i na tej podstawie wybiera typ indeksu wykorzystanego do złączenia: W przypadku danych o małej ziarnistości wykorzystany będzie w pierwszej kolejności indeks niegrupujący, w drugiej — grupujący. W przypadku danych o du ej ziarnistości wykorzystany będzie wyłącznie indeks grupujący. Złączenia pośrednie Wynik złączenia dowolnej liczby obiektów obliczany jest jako suma złączeń par obiektów. Ka de złączenie pośrednie mo e zostać wykonane za pomocą operacji innego typu, wybranego przez optymalizator dla dwóch łączonych obiektów. Dla ka dego złączenia pośredniego niezale nie wyznaczana jest tabela zewnętrzna i wewnętrzna złączenia. Kolejność wykonywania złączeń pośrednich wyznaczana jest przez Query Optimizera i nie musi odpowiadać kolejności wymienionej w instrukcji 5'.'%6. Klauzula WHERE Je eli zapytanie zawiera klauzulę 9*'4', optymalizator mo e zadecydować o wybraniu wierszy spełniających podane kryteria, zanim wykona operację złączenia. W ten sposób wielokrotnie zmniejsza się liczba wierszy, które będą łączone. Przykład: Pierwsze zapytanie zwraca wszystkie rekordy łączonych tabel, drugie — jedynie wy- brane rekordy z obu tabel. Pokazano statystyki związane z wykonaniem zapytań i plan ich wykonania: 75' 0QTVJYKPF 5'.'%6 .CUV0COG 1TFGT+ (41/ FDQ1TFGTU Q ,1+0 FDQ'ORNQ[GGU G 10 G'ORNQ[GG+ Q'ORNQ[GG+ )1 6CDNG 1TFGTU 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 6CDNG 'ORNQ[GGU 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU 53. 5GTXGT RCTUG CPF EQORKNG VKOG %27 VKOG OU GNCRUGF VKOG OU 5VOV6GZV ^0GUVGF .QQRU +PPGT ,QKP 176'4 4'('4'0%'5 =G?='ORNQ[GG+? ^+PFGZ 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?='ORNQ[GGU?=.CUV0COG? #5 =G? ^+PFGZ 5GGM 1$,'%6 =0QTVJYKPF?=FDQ?=1TFGTU?='ORNQ[GG+? #5 =Q? 5''- =Q?='ORNQ[GG+?=G?='ORNQ[GG+? 14'4' (149#4
  • 32. 146 Część I Język Transact-SQL TQY U CHHGEVGF 75' 0QTVJYKPF 5'.'%6 .CUV0COG 1TFGT+ (41/ FDQ1TFGTU Q ,1+0 FDQ'ORNQ[GGU G 10 G'ORNQ[GG+ Q'ORNQ[GG+ 9*'4' G(KTUV0COG .+-' # #0 (TGKIJV )1 6CDNG 'ORNQ[GGU 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 6CDNG 1TFGTU 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU 53. 5GTXGT RCTUG CPF EQORKNG VKOG %27 VKOG OU GNCRUGF VKOG OU 5VOV6GZV ^0GUVGF .QQRU +PPGT ,QKP 176'4 4'('4'0%'5 =Q?='ORNQ[GG+? ^%NWUVGTGF +PFGZ 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?=1TFGTU?=2-A1TFGTU? #5 =Q? 9*'4' =Q?=(TGKIJV? ^%NWUVGTGF +PFGZ 5GGM 1$,'%6 =0QTVJYKPF?=FDQ?='ORNQ[GGU?=2-A'ORNQ[GGU? #5 =G? 5''- =G?='ORNQ[GG+?=Q?='ORNQ[GG+? 9*'4' NKMG =G?=(KTUV0COG? # 14'4' (149#4 TQY U CHHGEVGF W drugim przypadku obie tabele najpierw zostały przeszukane pod kątem zgodności z kryteriami podanymi w klauzuli 9*'4' (stąd du a liczba przeszukań tabel), ale w rezul- tacie uzyskano wielokrotnie mniejszy zbiór wierszy, które zostały złączone. Pętla wyszukiwania Złączenie przeprowadzone za pomocą operatora pętli wyszukiwania (ang. Nested Loop) jest tym sposobem łączenia tabel, o którym myślimy w pierwszej kolejności, szczególnie je eli piszemy programy w językach takich jak C czy Basic. Złączenie tego typu polega na porównaniu przez SQL Server ka dego wiersza w wewnętrznej tabeli złączenia (decy- zja o tym, która tabela zostanie uznana za wewnętrzną jest podejmowana przez usługę Query Optimizer na podstawie liczby wierszy, ich unikalności i ziarnistości) z kolejnymi wierszami zewnętrznej tabeli złączenia. Najgorszym z mo liwych scenariuszów jest ten, w którym nie istnieją ani indeksy powiązane z kolumnami, według których następuje złączenie, ani indeksy związane z kolumnami wymienionymi w klauzuli 9*'4' — w takim przypadku zbiór danych źródłowych jest równy całym tabelom. Nie wnikając w opisaną w dalszej części ksią ki strukturę fizycznych plików bazy danych, spróbujemy obliczyć liczbę stron danych, które muszą zostać odczytane w przypadku, gdy tabela t1, składa- jąca się z w1 wierszy zapisanych na p1 stron, zostanie złączona z tabelą t2 zawierającą w2 wierszy zapisanych na p2 stronach — SQL Server musi odczytać p1 + w1 ∗ s2 stron danych. Oznacza to, e łącząc niewielkie tabele zawierające odpowiednio: tabela t2 (wewnętrzna) — 100 stron, tabela t1 (zewnętrzna) — 5 000 wierszy zapisanych na 200 stronach, SQL Server musi odczytać ponad 500 000 stron, czyli ponad 4 MB danych. Rozwiązaniem jest utworzenie indeksu grupującego na kolumnie wykorzystanej do łącze- nia tabel. Poniewa dane w tabeli są uporządkowane według wartości indeksu grupują- cego, nie ma potrzeby przeszukiwania całej tabeli. W przypadku wewnętrznej tabeli złączenia SQL Server mo e odczytać jedynie stronę zawierającą dokładnie ten wiersz,
  • 33. Rozdział 4. Optymalizacja zapytań 147 który odpowiada kolejnemu wierszowi tabeli zewnętrznej. W ten sposób zastępujemy w naszym wzorze wartość s2 stałą wyliczoną na podstawie ilości poziomów indeksu (będzie to liczba z zakresu od 1 do 3). Oznacza to, e złączenie naszych przykładowych tabel wymaga ju jedynie (w najgorszym razie) odczytania 15 200 stron, czyli około 120 KB danych — ponad 30-krotnie mniej. Dodatkowo, je eli na zewnętrzną tabelę złączenia nało ono warunek 9*'4', mo emy ogra- niczyć liczbę wierszy odczytanych z tej tabeli, tworząc niegrupujący indeks dla kolumny, według której wybierane są dane. Query Optimizer tworzy co najmniej cztery plany wykonania złączenia uwzględniające różną rolę tabel w złączeniu oraz kolejność wybierania danych i realizuje plan najtańszy. Złączenie za pomocą operatora pętli wyszukiwania wybierane jest, jeżeli zewnętrzna tabela złączenia zawiera dużą ilość wierszy, a wewnętrzna jest mała lub zawiera użyteczne indeksy. Łączenie Ograniczeniem złączenia przez pętle wyszukiwania jest niewykorzystywanie ewentualnie istniejących indeksów dla kolumny łączącej tabeli zewnętrznej. Niestety podczas pro- jektowania i strojenia bazy danych nie mamy pewności, która z tabel zostanie wybrana przez optymalizator jako tabela zewnętrzna złączenia. Je eli utworzymy indeks grupujący dla kolumny łączącej w obu złączonych tabelach (czyli obie kolumny będą posortowane według tej samej kolumny) SQL Server będzie mógł złączyć tabele poprzez łączenie (ang. Merge). Złączenie tego typu polega na odczy- taniu i porównaniu kolejnych wierszy obu tabel. Złączenie poprzez łączenie wybierane jest wtedy, gdy obie tabele są posortowane według kolumny złączenia. Łączenie tabel powiązanych związkiem typu jeden do wielu i jeden do jednego przebiega dokładnie według opisanego schematu. Natomiast łączenie tabel powiązanych związ- kiem typu wiele do wielu wymaga utworzenia tymczasowej tabeli do przechowywania kolejnych wierszy, zanim zostaną sprawdzone pozostałe wiersze drugiej tabeli i zapadnie decyzja o włączeniu lub odrzuceniu danego wiersza z wyniku złączenia. Poniewa wielo- krotnie zwiększa to liczbę operacji wejścia-wyjścia, optymalizator z reguły nie decyduje się na złączenie poprzez łączenie, je eli przynajmniej jedna tabela wykorzystywana do złączenia nie zawiera wartości niepowtarzalnych. Przykład: Tworzymy kopię tabel 1TFGTU i 1TFGTU GVCKN, następnie indeks grupujący dla kolumn 1TFGT+ i wykonujemy proste zapytanie łączące obie utworzone tabele: 75' 0QTVJYKPF 5'.'%6
  • 34. +061 FDQQ (41/ FDQ1TFGTU 5'.'%6
  • 35. +061 FDQQF (41/ FDQ=1TFGT GVCKNU?
  • 36. 148 Część I Język Transact-SQL %4'#6' %.756'4' +0': KAQ 10 Q 1TFGT+ %4'#6' %.756'4' +0': KAQF 10 QF 1TFGT+ )1 5'6 56#6+56+%5 6+/' 10 5'6 56#6+56+%5 +1 10 )1 5'.'%6
  • 37. (41/ Q ,1+0 QF 10 Q1TFGT+ QF1TFGT+ )1 6CDNG QF 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 6CDNG Q 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU Liczba odczytanych stron pozwala przypuszczać, e tabele zostały złączone za pomocą pętli wyszukiwania. Wyświetlając plan wykonania przekonamy się, e nasze obawy są słuszne — poniewa aden z indeksów grupujących nie został zdefiniowany jako uni- kalny, optymalizator, który nie analizuje danych zapisanych w obu tabelach pod kątem ich niepowtarzalności, zdecydował się na takie złączenie tabel. 5VOV6GZV ^0GUVGF .QQRU +PPGT ,QKP 176'4 4'('4'0%'5 =Q?=1TFGT+? ^%NWUVGTGF +PFGZ 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?=Q?=KAQ? ^%NWUVGTGF +PFGZ 5GGM 1$,'%6 =0QTVJYKPF?=FDQ?=QF?=KAQF? 5''- =QF?=1TFGT+?=Q?=1TFGT+? 14'4' (149#4 TQY U CHHGEVGF Zmieńmy definicję jednego indeksu i ponownie wykonajmy zapytanie, porównując koszty jego wykonania: %4'#6' 70+37' %.756'4' +0': KAQ 10 Q 1TFGT+ 9+6* 412A':+56+0) )1 5'.'%6
  • 38. (41/ Q ,1+0 QF 10 Q1TFGT+ QF1TFGT+ )1 6CDNG QF 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 6CDNG Q 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU 53. 5GTXGT RCTUG CPF EQORKNG VKOG %27 VKOG OU GNCRUGF VKOG OU 5VOV6GZV ^/GTIG ,QKP +PPGT ,QKP /'4)' =Q?=1TFGT+? =QF?=1TFGT+? 4'5+7#. =QF?=1TFGT+?=Q?=1TFGT+? ^%NWUVGTGF +PFGZ 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?=Q?=KAQ? 14'4' (149#4 ^%NWUVGTGF +PFGZ 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?=QF?=KAQF? 14'4' (149#4 TQY U CHHGEVGF
  • 39. Rozdział 4. Optymalizacja zapytań 149 Liczba odczytanych stron danych zmniejszyła się z 1694 do 32 (prawie 53 razy), a liczba wykonanych operacji przeszukiwania indeksu z 830 do 1! Pomimo tak spektakularnego zmniejszenia liczby operacji wejścia-wyjścia czas wykonania instrukcji uległ wydłu eniu, co związane jest z tym, e wszystkie potrzebne dane były zapisane w pamięci podręcznej, a same tabele były raczej niewielkie. Złączenie przez łączenie jest na tyle wydajnym sposobem złączania tabel, e optymali- zator mo e zdecydować się na to rozwiązanie, nawet je eli jedna z łączonych tabel nie jest posortowana według odpowiedniej kolumny. W takim przypadku najpierw następuje posortowanie tabeli, a następnie jej złączenie. Zgodność funkcji skrótu Złączenie na podstawie zgodności funkcji skrótu (ang. Hash) przeprowadzane jest, je eli optymalizator nie mo e znaleźć u ytecznych dla złączenia indeksów. Brak indeksów oznacza między innymi, e dane zawarte w tabelach źródłowych nie są posortowane. O ile w przypadku niewielkich danych ich posortowanie i złączenie przez łączenie mo e okazać się najtańszym rozwiązaniem, o tyle dla tabel zawierających miliony wierszy próba ich posortowania byłaby operacją wyjątkowo kosztowną. Równie sekwencyjne porównywanie wszystkich wierszy jednej tabeli z kolejnymi wierszami drugiej tabeli okazuje się zbyt kosztownym rozwiązaniem. Pozostaje podzielenie danych na grupy, co jest operacją szybszą ni pełne ich posortowanie, a jednocześnie pozwalającą ograni- czyć liczbę operacji wejścia-wyjścia. Dane zawarte w tabelach źródłowych dzielone są na grupy według wartości obliczonych dla kolejnych wierszy funkcji skrótu. Ka da grupa zawiera dane, dla których wyliczona wartość była taka sama, więc je eli nastąpi porównanie na podstawie wartości funkcji skrótu, wystarczy, e SQL Server sprawdzi zgodność z wierszami z wybranej grupy. Na przykład, je eli funkcją skrótu byłaby funkcja OQFWNQ , dane liczbowe zostałyby podzielone na 13 grup (mo liwe wartości funkcji OQFWNQ nale ą do zbioru 0, 12). W rzeczywistości funkcje skrótu stosowane przez SQL Server są bardziej skomplikowane, a liczba grup mo e sięgać kilku tysięcy. Dzieląc dane źródłowe pomiędzy grupy i porównu- jąc, wiersz po wierszu, dane z jednego zbioru wejściowego z odpowiadającymi im danymi ze zbioru danych drugiej tabeli, SQL Server mo e złączyć obie tabele, wykonując tylko jedną operację przeszukania tabeli (jak w przypadku złączenia przez łączenie). Przykład: Wykonamy kopie tabel 1TFGTU i 1TFGTU GVCKN i połączymy nowo utworzone, pozba- wione jakichkolwiek indeksów tabele: 75' 0QTVJYKPF 412 6#$.' Q LG GNK VCDGNG KUVPKC [ 412 6#$.' QF PCNG [ LG WUWPæè 5'.'%6
  • 40. +061 FDQQ (41/ FDQ1TFGTU 5'.'%6
  • 41. +061 FDQQF (41/ FDQ=1TFGT GVCKNU? )1
  • 42. 150 Część I Język Transact-SQL 5'6 56#6+56+%5 6+/' 10 5'6 56#6+56+%5 +1 10 )1 5'.'%6
  • 43. (41/ Q ,1+0 QF 10 Q1TFGT+ QF1TFGT+ )1 6CDNG QF 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 6CDNG Q 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU 53. 5GTXGT RCTUG CPF EQORKNG VKOG %27 VKOG OU GNCRUGF VKOG OU 5VOV6GZV ^*CUJ /CVEJ +PPGT ,QKP *#5* =Q?=1TFGT+? =QF?=1TFGT+? ^6CDNG 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?=Q? ^6CDNG 5ECP 1$,'%6 =0QTVJYKPF?=FDQ?=QF? TQY U CHHGEVGF Liczba odczytanych stron jest równie mała jak dla złączenia przez łączenie, ale czas wykonania operacji uległ wydłu eniu. W dokumentacji technicznej SQL Servera możemy przeczytać, że złączenie na podstawie zgodności funkcji skrótu powinno być stosowane jedynie dla zapytań ad hoc i świadczy o konieczności optymalizacji (strojenia) bazy danych. Wybór najlepszego indeksu Optymalizacja zapytań związana jest bezpośrednio z optymalizacją bazy danych i nie ma ogólnego schematu pozwalającego na osiągnięcie maksymalnej wydajności konkretnego zapytania. Jedynym rozwiązaniem jest testowanie ró nych rozwiązań i porównywanie wyników. Właściwie wyglądający proces testowania i optymalizacji prowadzący do wyboru najlepszego indeksu dla zapytania wybierającego dane z dwóch tabel opisano poni ej. W poniższych przykładach dodatkowo została włączona opcja wyświetlania graficznego planu wykonania poszczególnych zapytań, co wpłynęło na wydłużony czas ich wykonania i zwiększenie liczby operacji wejścia-wyjścia. Nale y utworzyć linię bazową zawierającą dane, z którymi będziemy porównywali wydaj- ność zapytania korzystającego z ró nych indeksów. Kolejno przedstawiono instrukcje (częściowo wypełnione losowymi danymi) tworzące kopię dwóch tabel bazy 0QTVJYKPF oraz zapytanie bazowe. Tworzymy kopię tabel pozbawionych jakichkolwiek indeksów: 75' 0QTVJYKPF 412 6#$.' Q LG GNK VCDGNG KUVPKC [ 412 6#$.' QF PCNG [ LG WUWPæè 5'.'%6
  • 44. +061 FDQQ (41/ FDQ1TFGTU 5'.'%6
  • 45. +061 FDQQF (41/ FDQ=1TFGT GVCKNU? )1
  • 46. Rozdział 4. Optymalizacja zapytań 151 Tworzymy zapytanie bazowe pobierające dane z tabel Q i QF: 5'.'%6 Q1TFGT+ %WUVQOGT+ 1TFGTCVG 2TQFWEV+ 7PKV2TKEG KUEQWPV (41/ Q ,1+0 QF 10 Q1TFGT+ QF1TFGT+ 9*'4' %WUVQOGT+ +0 5724 *#0#4 4+%57 #0 7PKV2TKEG )1 6CDNG QF 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 6CDNG Q 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU Statystyki wykonania zapytania bazowego, przede wszystkim liczba milisekund, którą SQL Server potrzebował na jego wykonanie (10 ms), są wartościami bazowymi, które nale y poprawić. Niewielka liczba odczytanych stron danych wynika z tego, e SQL Server połączył obie tabele na podstawie zgodności funkcji skrótu. W opisywanym przykładzie wszystkie argumenty wymienione w klauzuli 9*'4' to argu- menty 5#4). Są minimalnym zbiorem argumentów niezbędnym do przeprowadzenia zapla- nowanej selekcji, więc pozostaje nam utworzyć brakujące indeksy. W pierwszej kolejności dodamy indeksy do kolumn łączących tabelę. W przypadku tabeli Q będzie to indeks unikalny, poniewa tworzymy go dla kolumny będącej kluczem głównym tabeli: %4'#6' 70+37' +0': QAN 10 Q 1TFGT+ %4'#6' +0': QFAN 10 QF 1TFGT+ )1 6JG EQOOCPF U EQORNGVGF UWEEGUUHWNN[ Ponowne wykonanie zapytania bazowego zwróci następujące informacje: 6CDNG QF 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 6CDNG Q 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU Czas wykonania zapytania uległ wyraźnemu skróceniu, ale liczba odczytanych stron danych jest wielokrotnie większa. Sprawdźmy, jaki wpływ na wydajność zapytania będzie miało zastąpienie utworzonych indeksów indeksami utworzonymi dla kolumn wymie- nionych w klauzuli 9*'4': 412 +0': QQAN 412 +0': QFQFAN %4'#6' +0': QAU 10 Q %WUVQOGT+ %4'#6' +0': QFAU 10 QF 7PKV2TKEG )1 Po wykonaniu zapytania okazuje się, e poindeksowanie kolumn, według których wyszu- kiwane są dane, zamiast kolumn, według których łączone są tabele, nie przyniosło adnego wzrostu wydajności: 6CDNG QF 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 6CDNG Q 5ECP EQWPV NQIKECN TGCFU RJ[UKECN TGCFU TGCFCJGCF TGCFU 53. 5GTXGT 'ZGEWVKQP 6KOGU %27 VKOG OU GNCRUGF VKOG OU