获取查询索引查找(而不是扫描)
运行以下查询(SQL Server 2000)执行计划显示它使用索引查找,Profiler显示它正在执行71次读取,持续时间为0。
select top 1 id from table where name = '0010000546163' order by id desc
与以下内容相对比,使用8500次读取并持续约一秒的索引扫描。
declare @p varchar(20)
select @p = '0010000546163'
select top 1 id from table where name = @p order by id desc
为什么执行计划不同? 有没有办法改变第二种方法来寻找?
谢谢
编辑
表看起来像
CREATE TABLE [table] (
[Id] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [varchar] (13) COLLATE Latin1_General_CI_AS NOT NULL)
Id是主聚簇键名称上有非唯一索引,id / name上有唯一的复合索引还有其他列 - 为简洁起见而将其留出
现在你已经添加了模式,请试试这个。 SQL Server将长度差别视为不同的数据类型,并将转换varchar(13)
列以匹配varchar(20)
变量
declare @p varchar(13)
如果不是,那么整理优势呢? 数据库或服务器与列不同?
declare @p varchar(13) COLLATE Latin1_General_CI_AS NOT NULL
如果不是,请在结果前后加上
SET SHOWPLAN_TEXT ON
GO
如果名称列是NVARCHAR,那么你需要你的参数也是相同的类型。 它应该通过索引查找来提取它。
declare @p nvarchar(20)
select @p = N'0010000546163'
select top 1 id from table where name = @p order by id desc
链接地址: http://www.djcxy.com/p/7651.html
上一篇: Getting a query to index seek (rather than scan)
下一篇: Recieving audio stream with Gstreamer results in reason not negotiated error