Udostępnij za pośrednictwem


Trwa przygotowywanie instrukcji SQL

The SQL Server aparat relacyjny introduces full support for preparing SQL statements before they are executed. Jeśli aplikacja ma wykonać instrukcja języka SQL kilka razy, mogą być używane w bazie danych interfejs API do, wykonaj następujące czynności:

  • Przygotuj jeden raz w instrukcja.To spowoduje kompilację SQL instrukcja do planu wykonania.

  • Wykonanie planu wykonania wstępnie skompilowanym co czas musi wykonać instrukcję.Pozwala to uniknąć konieczności ponownego kompilowania instrukcja języka SQL przy każdym wykonaniu po raz pierwszy.

    Przygotowywanie i wykonywanie instrukcji jest kontrolowana przez funkcje interfejsu API i metod.Nie jest częścią Transact-SQL język. Modelu przygotowanie/wykonać wykonać instrukcji SQL jest obsługiwany przez SQL Server Macierzystego dostawca OLE DB klient oraz SQL Server Macierzysty sterownik ODBC klient. On a prepare request, either the provider or the driver sends the statement to SQL Server with a request to prepare the statement.SQL Server compiles an execution plan and returns a handle for that plan to the provider or driver.Na żądanie wykonać przez dostawca lub sterownik wysyła serwer żądanie wykonać planu, który jest skojarzony z tym uchwycie.

Przygotowanych instrukcji nie można używać do tworzenia obiektów tymczasowych na SQL Server. Przygotowanych instrukcji nie mogą odwoływać się do tworzenia tymczasowych obiektów, takich jak tabele tymczasowe procedury składowane w systemie.Procedury te muszą być wykonane bezpośrednio.

Nadmiar korzysta z modelu przygotowanie/wykonać może spowodować pogorszenie wydajności.instrukcja jest wykonywane tylko raz, na bezpośrednie wykonanie wymaga tylko jedno przesłanie sieci do serwera.Przygotowywanie i wykonać instrukcja języka SQL wykonane tylko jeden raz wymaga przesłanie dodatkowych sieci; jeden podróży do przygotowania instrukcji i jeden podróży do jego wykonać.

Trwa przygotowywanie instrukcja jest bardziej skuteczne, jeśli używane są parametru.Załóżmy na przykład, aplikacja od czasu do czasu o do pobierania informacji o produktach z AdventureWorks przykładowej bazy danych.Istnieją dwa sposoby, można to zrobić przez aplikację.

Korzystając z pierwszego sposób, aplikacja może być wykonywany oddzielną kwerendę dla każdego produktu, wymagany:

SELECT * FROM AdventureWorks.Production.Product
WHERE ProductID = 63;

Za pomocą drugi sposób, aplikacja wykonuje następujące czynności:

  1. Przygotowanie instrukcja, która zawiera znacznik parametru (?):

    SELECT * FROM AdventureWorks.Production.Product
    WHERE ProductID = ?;
    
  2. Znacznik parametru jest powiązana zmiennej programu.

  3. Każdego informacje o produkcie czas jest potrzebny, wypełnia zmiennej związanego z wartości klucz i wykonuje instrukcja.

Drugi sposób jest bardziej efektywne, gdy w instrukcja jest wykonywana więcej niż trzy razy.

In SQL Server, the prepare/execute model has no significant performance advantage over direct execution, because of the way SQL Server reuses execution plans.SQL Server has efficient algorithms for matching current SQL statements with execution plans that are generated for prior executions of the same SQL statement.Jeśli aplikacja wykonuje instrukcję SQL ze znacznikami parametr wiele razy SQL Server wykorzystywane ponownie z pierwszym wykonaniu dla drugiego i kolejnych wykonań plan wykonania (chyba że wieku planu z pamięci podręcznej procedury). Modelu przygotowanie/wykonać nadal ma następujące zalety:

  • Znajdowanie plan wykonania przez dojście do identyfikacji jest bardziej efektywne niż algorytmów, używane w celu dopasowania do istniejących planów wykonywania instrukcja języka SQL.

  • Aplikacja może kontrolować, podczas tworzenia planu wykonania i po nim jest używana wielokrotnie.

  • Modelu przygotowanie/wykonać jest przenośny do innych baz danych, w tym wcześniejsze wersje programu SQL Server.