相关疑难解决方法(0)

带重新编译的存储过程

我有这个存储过程..当我告诉开发人员不推荐使用 Recompile 选项时,他们回答说“这是因为可以使用许多不同的参数调用这个 SP,我们希望优化器获取一个新计划每次调用(不理想,但与使用旧的缓存计划相比,这是一次尝试让它运行得更可靠、速度更快)”

他们说的对吗?有什么方法可以不用重新编译就可以做到这一点

   create PROCEDURE [dbo].[VERIFIER_QUEUE]
   @cas_name varchar(20) = NULL,
   @instance_name varchar(50) = NULL,
   @verifier_id int = NULL,
   @applicant_type VARCHAR(20) = NULL

    WITH RECOMPILE     
    AS

   BEGIN 
SET NOCOUNT ON

DECLARE @cas_name_x varchar(20)
DECLARE @instance_name_x varchar(50)
DECLARE @verifier_id_x int
DECLARE @InstanceId INT
...............
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization execution-plan query-performance

6
推荐指数
1
解决办法
1509
查看次数

Tsql 查询速度因 Or 内 where 子句而变慢,导致索引扫描而不是搜索

我一直在努力使这个查询更有效地工作。

我发现 where 子句中 Or 的数量是这个查询中最大的问题。此查询位于存储过程中。

我到了我能想到的唯一选择的地步。:

  • 为所有不同的入站参数可能性创建 16 种不同的查询。
  • 创建动态 sql 查询,但我认为这不会更快
  • 恢复到字符串 sql,但我不喜欢这样做,因为它们的执行速度不如存储过程。

我相信其他人以前也遇到过这个问题。查询性能在大约一秒或更短的时间内开始并不可怕,但在某些情况下,它被多次命中,导致长达 5 或 6 秒的延迟。

查询如下。:

DECLARE @PERSON_ID AS INT
DECLARE @ITEM_ID AS INT
DECLARE @ITEM_VERSION AS INT
DECLARE @ITEM_SUB_NAME AS VARCHAR(250)
DECLARE @ITEM_SUB_SUB_NAME AS VARCHAR(250)

--DEFAULTS
SET @PERSON_ID = 0
SET @ITEM_ID = 0
SET @ITEM_VERSION = 1
SET @ITEM_SUB_NAME = NULL
SET @ITEM_SUB_SUB_NAME = NULL

    SELECT ID, PERSON_ID, 
           ISNULL(ITEM_VERSION, 1) AS ITEM_VERSION,
           ISNULL(ITEM_SUB_NAME, '') AS 'ITEM_SUB_NAME',
           ISNULL(ITEM_SUB_SUB_NAME, '') AS 'ITEM_SUB_SUB_NAME',
           ISNULL(ITEM_DATE, '1/1/1900') AS …
Run Code Online (Sandbox Code Playgroud)

performance index sql-server t-sql query-performance

0
推荐指数
1
解决办法
3582
查看次数