Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 视图上的where条件存在性能问题_Sql_Sql Server - Fatal编程技术网

Sql 视图上的where条件存在性能问题

Sql 视图上的where条件存在性能问题,sql,sql-server,Sql,Sql Server,我有一个视图,并尝试通过应用where过滤器访问视图数据 当我直接使用name进行筛选时,马上就会得到结果。但当声明一个变量并将该变量传递到where条件时,我得到的结果是20sec。。请让我知道为什么在where条件下使用变量时会出现如此大的差异 select count(1) from vw_Student where studentName='raja'; (result in 1sec) declare @name char(4); set @name='raja' select

我有一个视图,并尝试通过应用where过滤器访问视图数据

当我直接使用name进行筛选时,马上就会得到结果。但当声明一个变量并将该变量传递到where条件时,我得到的结果是20sec。。请让我知道为什么在where条件下使用变量时会出现如此大的差异


select  count(1) from vw_Student where studentName='raja'; (result in 1sec)

declare @name char(4);
set @name='raja'
select  count(1) from vw_Student where studentName=@name;(result in 20sec)

他们有相同的执行计划吗?(如何检查执行计划:)它既不是
where
条件,也不是视图。重要的信息是执行计划、表定义、视图语句和索引,这些都没有出现在这个问题中。变量是一个固定宽度值,
char(4)
,而不是更常见的
varchar(..)
。这意味着必须使用固定长度语义对数据进行过滤-必须首先将较短的值填充到完整长度。这意味着在
studentName
上创建的任何索引都是无用的,因为它们基于全文,而不是填充/截断的值。将变量类型更改为
varchar(4)
@PanagiotisKanavos,您错了,varchar的优先级高于char,因此当然不会填充较短的值。变量将隐式转换为varchar,反之亦然。@DenisRubashkin没有任何我们只能猜测的信息。缺少索引很容易产生延迟。如果发生这种情况,则意味着索引不合适——要么是因为基础字段的类型错误,要么是在使用索引之前需要进行转换。排序规则不匹配、字段上的函数以及在本例中比较固定宽度和可变长度字符串就是这种情况。它们有相同的执行计划吗?(如何检查执行计划:)它既不是
where
条件,也不是视图。重要的信息是执行计划、表定义、视图语句和索引,这些都没有出现在这个问题中。变量是一个固定宽度值,
char(4)
,而不是更常见的
varchar(..)
。这意味着必须使用固定长度语义对数据进行过滤-必须首先将较短的值填充到完整长度。这意味着在
studentName
上创建的任何索引都是无用的,因为它们基于全文,而不是填充/截断的值。将变量类型更改为
varchar(4)
@PanagiotisKanavos,您错了,varchar的优先级高于char,因此当然不会填充较短的值。变量将隐式转换为varchar,反之亦然。@DenisRubashkin没有任何我们只能猜测的信息。缺少索引很容易产生延迟。如果发生这种情况,则意味着索引不合适——要么是因为基础字段的类型错误,要么是在使用索引之前需要进行转换。排序规则不匹配、字段上的函数以及在本例中比较固定宽度和可变长度字符串就是这种情况。