WEB开发网
开发学院数据库MSSQL Server 如何应付表数据过大的查询问题?(如何尽量避免大表... 阅读

如何应付表数据过大的查询问题?(如何尽量避免大表关联)

 2009-01-15 10:19:28 来源:WEB开发网   
核心提示: 的产生都是实时的,即当调用视图时,自动扩展视图,去运行里面相应的select语句.后来才知道在2000后的版本中视图分一般视图和索引视图,一般视图就是没有创建索引的我印象中的视图.而创建了视图后就称为索引视图.索引视图是物理存在的,可在视图上首先创建一个唯一的聚集索引,其它字段上也可创建非

的产生都是实时的,即当调用视图时,自动扩展视图,去运行里面相应的select语句.后来才知道在2000后的版本中视图分一般视图和索引视图,一般视图就是没有创建索引的我印象中的视图.而创建了视图后就称为索引视图.索引视图是物理存在的,可在视图上首先创建一个唯一的聚集索引,其它字段上也可创建非聚集索引.在不改变基础表的情况下,起到了优化的效果.

  CREATE VIEW memberView
WITH SCHEMABINDING
AS
  SELECT cardNo,proxyID from member
GO
--以会员卡号创建一个唯一聚集索引
CREATE UNIQUE CLUSTERED INDEX ix_member_cardNo
  ON member (cardNo);
  
GO

注意:创建索引视图要点:

1: CREATE VIEW memberView后面要跟上WITH SCHEMABINDING

理由:? 使用 schemaname.objectname 明确识别视图所引用的所有对象,而不管是哪个用户访问该视图.

? 不会以导致视图定义非法或强制 SQL Server 在该视图上重新创建索引的方式,更改视图定义中所引用的对象.

2:视图上的第一个索引必须为 CLUSTERED 和 UNIQUE.

理由:必须为 UNIQUE 以便在维护索引视图期间,轻松地按键值查找视图中的记录,并阻止创建带有重复项目的视图(要求维护特殊的逻辑).必须为 CLUSTERED,因为只有聚集索引才能在强制唯一性的同时存储行.

3:以下情况可考虑创建索引视图:

? 可预先计算聚合并将其保存在索引中,从而在查询执行时,最小化高成本的计算.

? 可预先联接各个表并保存最终获得的数据集.

? 可保存联接或聚合的组合.

4:基础表的更新会引发索引视力的更新.

5:索引视图的创建同时会带来维护上的开销.

理由:1:因为索引视图是物理存在的.

2:要额外的维护索引.

实现:SQL:select 字段 from order

inner join memberView on

order.cardNo=member.cardNo

and member.proxyID=in('a-01',代理号二)

and 时间 between '20080101' and '20080131'

总结:两种解决方案来看,各有所长,一般可以优先考虑使用索引视图来优化大表关联.以上是本人对于如何尽量避免发生大表关联所采取的措施,望大家指教.

上一页  1 2 3 

Tags:如何 应付 数据

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接