How to Optimize the Use of the “OR” Clause When Used with Parameters (SQL Server 2008)

后端 未结 4 2041
梦谈多话
梦谈多话 2020-12-17 22:57

I wonder if there is any wise way to rewrite the following query so that the indexes on columns get used by optimizer?



        
4条回答
  •  南方客
    南方客 (楼主)
    2020-12-17 23:04

    Yes - careful use of dynamic sql will solve this problem. There are two ways to do it:

    1. If you are a "purist" about stored procs, then compose a custom query string inside a stored proc and execute the string. The specific query then can be dynamically written per execution to include only the relevant criteria.

    2. If you are flexible about the location of this SQL, you can (again CAREFULLY) compose the query string in your application and pass it to the server.

      The danger, of course, is around SQL injection. So you have to be very careful how the data is passed from client into the dynamic sql statement.

    Really thorough and comprehensive articles from Erland Sommarskog:

    • Dynamic Search Conditions in T‑SQL
    • The Curse and Blessings of Dynamic SQL

提交回复
热议问题