ms-sql的索引视图的问题,欢迎大家讨论

athere_08 2008-01-21 04:12:23
---------------------------------------------------
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)
go

insert 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
go

CREATE VIEW V_1 WITH SCHEMABINDING
AS
SELECT b,
count_big(1) as ZongJiaoYi
FROM dbo.index_view_table
group by b
go

CREATE 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数据库下,在新建的数据库下也一样有问题?
...全文
75 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
athere_08 2008-01-22
  • 打赏
  • 举报
回复
可能的原因:
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是否打补丁,但在这里体现不出补丁的版本
athere_08 2008-01-21
  • 打赏
  • 举报
回复
-- 这样还是不行
select * from V_1 with(index=in_V_1)
-- 下面的可以
select * from V_1 with(index=in_V_1,NOEXPAND)
-- 我的数据量是47万条, 为了测试索引视图,我已经将相关的index都删除了,现在查询分析器都自动选择primary key 了.
哪位高人,能解释一下,有什么措施,可以影响一下查询分析器的自动选择索引的行为
kk19840210 2008-01-21
  • 打赏
  • 举报
回复
可能你的数据量太少 优化器认为 全表扫描比索引扫描快 所以用的全表扫描

SELECT   b, 
count_big(1) as ZongJiaoYi
FROM dbo.index_view_table WITH (INDEX(in_V_1))
group by b


使用上面语句 强制使用索引看下

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧