SQL Server 2005 offers two options that help you optimize database performance: the ability to choose forced parameterization at a database level or specify within an sp_create_plan_guide stored procedure a plan guide that lets you pick and choose which values will be parameterized.

If you're not familiar with the concept of auto-parameterization and how SQL Server 2000 reuses query plans, you can find plenty of information on the Internet and in SQL Server 2000 Books Online (BOL); you should at least read the BOL topic "Auto-Parameterization," or the Microsoft article "Auto-Parameterization" at http:// msdn.microsoft.com/library/default.asp?url =/library/en-us/architec/8_ar_sa_9r8u.asp for a quick overview. In short, the query optimizer uses the auto-parameterization tool to reuse plans for ad hoc SQL code that isn't submitted as a stored procedure.

The auto-parameterization process that Microsoft released in SQL Server 2000 can provide database performance boosts— especially on high-volume online transaction processing (OLTP) systems—by reducing the time and resource overhead associated with generating an execution plan.When the optimizer does a good job of selecting a query plan, it saves SQL Server the trouble of compiling a plan from scratch. However, it's dangerous for the optimizer to be too aggressive in making an "educated guess" about whether a query would benefit from an existing plan.When the optimizer guesses correctly, it saves the cost of compilation. With an incorrect guess, the query might be executed with an inefficient query plan.

With SQL Server 2005, you should be careful when you're using the default decision-processes to auto-parameterize a query. SQL Server 2005 uses a new term—simple parameterization—to refer to the feature that SQL Server 2000 users think of as autoparameterization. However, SQL Server's ability to reuse plans in SQL Server 2005 is more robust than in SQL Server 2000. This process is similar to the one SQL Server 2000 uses to auto-parameterize a query.You can override the simple-parameterization process by changing the PARAMETERIZATION option to forced—simple is the default—in the ALTER DATABASE TSQL statement. You can read the SQL Server 2005 BOL topic "ALTER DATABASE (Transact-SQL)"for more information. During query compilation, changing the PARAMETERIZATION setting causes SQL Server to convert to a parameter any literal value in a SELECT, INSERT, UPDATE,or DELETE statement submitted in any form.The BOL topic "Forced Parameterization"at http://msdn2.microsoft.com/ en-us/library/ms175037.aspx includes a list of exceptions to this rule. I encourage you to review these exceptions.

Compared to simple parameterization, forced parameterization causes SQL Server to be more aggressive when choosing how and when to create and reuse a plan, but the risks associated with both types of parameterization are the same. Performance is improved if SQL Server reuses plans that resulted from a previous query—assuming the existing plan is an efficient execution strategy. However, using forced parameterization and executing an inefficient query plan could result in degraded database performance instead of an improvement.

Fortunately, SQL Server 2005 provides a tuning weapon—the sp_create_plan_guide stored procedure—that lets you use a template plan guide for queries that match certain-patterns. Using plan guides generally optimizes query performance. In some cases, a DBA might know that a particular statement in a stored procedure could cause SQL Server to choose a less than optimal plan. In such an instance, the DBA can modify the statement to make the query plan run more efficiently. For example, you can modify a statement in the sp_create_plan_guide stored procedure to override SQL Server 2005's specified default behavior for the PARAMETERIZATION option in the ALTER DATABASE statement. Thus, even when the PARAMETERIZATION option is set to forced, you can specify that for a certain class of queries, only simple parameterization is attempted, not forced parameterization.

You might be saying,"Wow, using the sp_create_plan_guide stored procedure seems like a good idea, so show me some examples." You can find examples and more detailed explanations in the following SQL Server 2005 BOL topics:"Simple Parameterization," "Forced Parameterization," "Parameters and Execution Plan Reuse," "Understanding Plan Guides," "Designing and Implementing Plan Guides," " Specifying Query Parameterization Behavior by Using Plan Guides," "Designing Plan Guides for Parameterized Queries,""How SQL Server Matches Plan Guides to Queries," and "Using SQL Server Profiler to Create and Test Plan Guides."