Aracılığıyla paylaş


Plan Kılavuzları'nı kullanarak sorgu Parameterization davranışı belirleme

PARAMETERIZATION veritabanı seçeneği olduğunda küme SIMPLE için SQL Server sorgu iyileştiricisi sorguları parameterize seçebilirsiniz. Bu sorguda bulunan tüm hazır bilgi değerleri ile parametrelerini yerine başka anlamına gelir.Bu işlem için olarak adlandırılır Basit parameterization.SIMPLE parameterization etkin olduğunda, hangi sorgu parametreli ve olmayan hangi sorgular denetleyemezsiniz.Ancak, veritabanındaki tüm sorguları için FORCED PARAMETERIZATION veritabanı seçeneğini ayarlayarak parametreli belirtebilirsiniz.Bu işlem için olarak adlandırılır Zorlanmış parameterization.

Aşağıdaki yollarla planı Kılavuzları'nı kullanarak bir veritabanı parameterization davranışını geçersiz kılabilirsiniz:

  • PARAMETERIZATION veritabanı seçeneği olduğunda küme SIMPLE için bu Zorlanmış parameterization belirli sınıfının sorgularını denenir belirtebilirsiniz.Parametreli Sorgu formda bir TEMPLATE plan kılavuzu oluşturma ve PARAMETERIZATION ZORLANMıŞ sorgu ipucu belirtme bunu sp_create_plan_guide saklı yordam.Bu tür bir plan kılavuzu, yalnızca belirli sınıf yerine, tüm sorguları, sorguların, Zorlanmış parameterization etkinleştirmek için bir yol olarak düşünebilirsiniz.

  • PARAMETERIZATION veritabanı seçeneği FORCED için ayarlı olduğunda, belirli sınıf için sorgular, yalnızca basit parameterization denenir, parameterization zorunlu olduğunu belirtebilirsiniz.Bir TEMPLATE oluşturarak bunu plan kılavuzu zorla parametreli formundaki sorgu ve PARAMETERIZATION SIMPLE sorgu ipucu belirtme sp_create_plan_guide.

Üzerinde aşağıdaki sorgu dikkate AdventureWorks Veritabanı:

SELECT pi.ProductID, SUM(pi.Quantity) AS Total
FROM Production.ProductModel AS pm 
    INNER JOIN Production.ProductInventory AS pi 
        ON pm.ProductModelID = pi.ProductID 
WHERE pi.ProductID = 101 
GROUP BY pi.ProductID, pi.Quantity HAVING SUM(pi.Quantity) > 50;

Bir veritabanı yöneticisi olarak, veritabanındaki tüm sorgulara Zorlanmış parameterization etkinleştirmek istemediğiniz derecelendirmiştir.Ancak, önceki sorguyu sözdizimsel olarak eşdeğer, ancak yalnızca sabit, hazır bilgi değerleri farklı olan tüm sorgulara derleme maliyetleri önlemek istiyorsunuz.Diğer bir deyişle, sorgu, böylece bu tür bir sorgu için bir sorgu planını yeniden parametreli istediğiniz.Bu durumda, aşağıdaki adımları izleyin:

  1. Parametreli Sorgu biçiminde alabilirsiniz.Tek güvenli yolu kullanmak için bu değer elde etmek için sp_create_plan_guide kullanmaktırsp_get_query_template sistem saklı yordamı.

  2. Plan kılavuzu parametreleştirilmiş sorguyu Sorgu PARAMETERIZATION ZORLANMıŞ ipucu belirtme formunda oluşturun.

    Important noteImportant Note:

    Sorguda, parameterizing bir parçası olarak SQL Server parametreleri değeri ve literal boyutuna bağlı olarak hazır bilgi değerleri değiştirmek için bir veri türü atar. Geçirilen sabit hazır bilgi değeri için aynı işlemi gerçekleşir @ stmt parametresi çıkışsp_get_query_template.Belirtilen veri türü için params bağımsız değişkenisp_create_plan_guide parametreli gibi tarafından sorgunun eşleşmelidirSQL Server, birden fazla plan Kılavuzu tam olası parametre değerlerini sorgu aralık kapsamasını oluşturmak zorunda kalabilirsiniz. Veriler hakkında bilgi için türleri SQL Server Sorguda parametrelenmiştir sonra parametrelere atar Bkz: Zorlanmış Parameterization.

Aşağıdaki komut dosyası, hem parametreli hale getirilmiş bir sorguya edinmek ve bu planı kılavuz üzerinde oluşturmak için kullanılabilir:

DECLARE @stmt nvarchar(max);
DECLARE @params nvarchar(max);
EXEC sp_get_query_template 
    N'SELECT pi.ProductID, SUM(pi.Quantity) AS Total 
      FROM Production.ProductModel AS pm 
      INNER JOIN Production.ProductInventory AS pi ON pm.ProductModelID = pi.ProductID 
      WHERE pi.ProductID = 101 
      GROUP BY pi.ProductID, pi.Quantity 
      HAVING sum(pi.Quantity) > 50',
    @stmt OUTPUT, 
    @params OUTPUT;
EXEC sp_create_plan_guide 
    N'TemplateGuide1', 
    @stmt, 
    N'TEMPLATE', 
    NULL, 
    @params, 
    N'OPTION(PARAMETERIZATION FORCED)';

Benzer şekilde, Zorlanmış parameterization zaten etkin olduğu bir veritabanında, örnek sorguyu ve diğerleri dışında sabit, hazır bilgi değerleri, sözdizimsel olarak eşdeğer olan basit parameterization kurallarına göre parametreli emin olabilirsiniz.Bunu yapmak için , OPTION yan tümcesinde PARAMETERIZATION SIMPLE PARAMETERIZATION ZORLANMıŞ yerine belirtin.

Not

TEMPLATE planı eşleşme ifadeleri sorgularda yalnızca tek bir deyim içerir ve toplu olarak gönderilen kılavuzluk eder.Çoklu deyimli toplu işlemleri ifadelerini TEMPLATE planı kılavuzlarıyla eşlenmesi uygun değildir.