---------------------------------------------------
set ANSI_NULLS on
go
set ANSI_PADDING on
go
set ANSI_WARNINGS on
go
set ARITHABORT on
go
set CONCAT_NULL_YIELDS_NULL on
go
set QUOTED_IDENTIFIER on
go
set NUMERIC_ROUNDABORT OFF
go
drop table index_view_table;create table index_view_table(
a varchar(8) not null primary key,
b decimal(10,2) not null)
goinsert into index_view_table(a,b) values('1',1);
insert into index_view_table(a,b) values('2',1);
insert into index_view_table(a,b) values('3',2);
insert into index_view_table(a,b) values('4',2);
go
drop view V_1
goCREATE VIEW V_1 WITH SCHEMABINDING 
AS
SELECT b,
count_big(1) as ZongJiaoYi
FROM dbo.index_view_table
group by b
goCREATE UNIQUE CLUSTERED INDEX in_V_1 ON V_1 (b)
go--1.通过查询分析器看,并没有索引in_V_1
SELECT b,
count_big(1) as ZongJiaoYi
FROM dbo.index_view_table
group by b--2.通过查询分析器看,没有使用索引in_V_1
select * from V_1--为什么呢,是我数据库版本的问题吗mssql2000,标准安装,四个服务全部启动了,我是以sa登录的,在master数据库下,在新建的数据库下也一样有问题?

解决方案 »

  1.   

    可能你的数据量太少 优化器认为 全表扫描比索引扫描快 所以用的全表扫描SELECT   b, 
    count_big(1)   as   ZongJiaoYi 
    FROM   dbo.index_view_table WITH (INDEX(in_V_1))
    group   by   b使用上面语句 强制使用索引看下
      

  2.   

    -- 这样还是不行
    select * from V_1 with(index=in_V_1)
    -- 下面的可以
    select * from V_1 with(index=in_V_1,NOEXPAND)
    -- 我的数据量是47万条, 为了测试索引视图,我已经将相关的index都删除了,现在查询分析器都自动选择primary key 了. 
    哪位高人,能解释一下,有什么措施,可以影响一下查询分析器的自动选择索引的行为
      

  3.   

    可能的原因:
    SQL   Server   2000   个人版
    SQL   Server   2000   Desktop   Engine(我的数据库的版本)
    SQL   Server   2000   标准版
    SQL   Server   2000   企业版
    ------
    注意 索引视图是 SQL Server 2000 和 2005 各版本的一个功能。在 SQL Server 2000 和 2005 的 Developer 和 Enterprise 版本中,查询处理器可使用索引视图来解析结构上与该视图相匹配的查询,即便不按名称来引用视图。在其他版本中,必须按名称来引用视图,并对视图引用使用 NOEXPAND 提示来查询索引视图的内容。
    ------
    由于也是临时使用一下ms-sql,还不知道这中间这么多的玄机.select   *   from   V_1   with(NOEXPAND) 
    go
    ----------------------------------------网上区分版本号的方法------------------
    如何查看MS-SQL的安装版本及补丁安装情况     
    1.如何查看SQL Server2000的版本号
      select serverproperty('Edition')
      select serverproperty('ProductLevel')
      serverproperty函数返回有关服务器实例的属性信息,
      详细操作可以查看SQL Server2000的联机帮助2.如何查看SQL Server2000是否打补丁,及补丁的版本
      有两种方法可以实现:一种是查看MS-SQL的关于信息;
      一种是利用MS-SQL的语句来实现(Select @@Version)或者
      (SELECT SERVERPROPERTY('ProductVersion'))  Microsoft SQL Server  2000 - 8.00.194 (Intel X86)   Aug  6 2000 00:57:48   Copyright (c) 1988-2000 Microsoft Corporation  Personal Edition on Windows NT 5.1 (Build 2600: Service Pack 2) 
       8.00.194 -——————SQL Server 2000 RTM(未安装补丁) 
       8.00.384 -——————(SP1) 
       8.00.534 -——————(SP2) 
       8.00.760 -——————(SP3) 
       8.00.2039 -——————(SP4)  
      另外通过Copyright (c) 1988-2000 Microsoft Corporation中的日期也可以看出SQL Server2000是否打补丁,但在这里体现不出补丁的版本