SQL 执行计划显示相同输入的不同结果

标签 sql database sql-server-2005

declare @name varchar(156)
set @name ='sara'
--Query 1:
SELECT [PNAME]  FROM [tbltest] where  [PNAME]  like '%'+@name+'%'

--Query 2:
SELECT [PNAME]  FROM [tbltest] where  [PNAME]  like '%sara%'

假设在 [tbltest] 的 [PNAME] 列上有一个 NoneClustered Index。 运行查询时,执行计划显示索引 Seek For Query 1 和 Index Scan for Query 2。 我预计 Excution Paln 会为这两个查询显示索引扫描,但由于在第一个查询中使用参数,它会显示索引查找。 那我到底是什么? 在这两个查询中,我们都在另一边使用了“%”,并且知道在这种状态下,sql 不考虑索引 但为什么在第一个 Query Execution Plan Show Index Seek 中? 谢谢

最佳答案

查询一使用一个参数,查询二一个常量。

如果更改常量值,查询 2 的计划将不会被重用。

查询plan 1即可。在这种情况下,SQL Server(简单地)保留它的选项以重用该计划。

又名:查询相同。

如果你force parameterisation ,那么你应该让两个查询都像查询 1 一样运行。但我还没有尝试过......

关于SQL 执行计划显示相同输入的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3228315/

相关文章:

php - 如何仅推出表中唯一行的 JSON?

java - 如何从 servlet 连接到数据库。我试过下面的代码,但控制每次都异常

sql-server - Sql Server 是否缓存了跨事务的编译查询和执行计划?

php - 允许表中重复

c++ - 从 std::string 转换为 SAString

database - 使用 Web 应用程序处理慢速数据库的策略

sql-server-2005 - 在 64 位 Windows 7 计算机上安装 Sql Server 2005 时出现警告和错误

.net - 如何确定分布式事务超时的原因

SQL SELECT FROM ... AS 与数据类型说明符?

database - Access VBA : enter expression in user form, 将计算结果存储在表中?