189 8069 5689

sqlserver聚簇,sql 聚类

如何做SqlServer 数据查询优化!

一、建立索引

成都创新互联主要从事成都网站设计、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务武汉,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

二、建立存储过程

三、只查询您所需要的数据,不要把所有数据都查询出来,防止数据冗余。

四、对于大量及海量数据一般还要建立分区

sqlserver 物化视图问题

可以的。贴一片网上的资料给你,具体参考地址:

物化视图 sql server

物化视图,所谓视图实际上是不存储物理信息的(同表相区别,表存储实际的数据和表的索引信息等。),视图仅仅存储 一个select语句而已。而物化视图就要视图也存储实际的数据,这种实际数据,就是索引。oracle 8imssqlserver2000中引入的。比如oracle的函数索引和sqlserver2000的索引视图都是物化视图。原因是这种视图能够显著提高性能,举个例子

一个表:

create table mytable (id int not null,name varchar(20) not null)

create index idx_mytable on mytable.name

当我们查询的时候,

select * from mytable where name like 'j%',

优化器能够使用索引来提高性能,然而我们遇到这种情况就不能使用索引了,如:

select * from mytable where name like '%bing%'

或者

select * from mytable where substring(name,1,5)='jiang'

这样的情况不能使用索引

但引入物化视图就不同了

create view myview(vid,vname) as select id,substring(name,1,5) from myview.

然后再vname上建立索引即可显著提高查询性能。

oracle的函数索引亦是如此。

create index idx_mytable on mytable(upper(name))

--

就是这样的

1.6.2 物化视图

SQL Server 2005增强了索引化视图,也叫做物化视图。现在你可以使用一个能索引化的视图扩展集合了。在SQL Server中还有一些可以被索引化的视图类型,如使用下列选项的视图:

外部连接(Outer Joins)。

级联集合(Scalar Aggregates)。

ROLLUP和CUBE。

当数据库管理员或者开发者在视图上创建索引时,这个视图就被物化(执行)了,并且结果集被永久地保存在唯一聚簇索引(Clustered Index)中,保存方式与一个有聚簇索引的表的保存方式相同。可以在第一级唯一聚簇索引创建之后添加非聚簇的第二级索引。

索引视图有以下两个优点。

减除了为引用视图的查询动态建立结果集的管理开销。

优化人员可以在查询中使用视图索引,而不需要在FROM子句中直接指定视图。

引用索引化视图中的相关列的现有查询可以受益于提高了的在索引化视图中获取数据的效率,而且不需要重新编写代码。关于它们更多的介绍,请见第3章。代码举例,请见第6章“代码章节”。

sql server 会自动根据主码创建聚簇索引吗?

在SQL中,如果在创建表的时候创建了primary key,没有为primary key指定名称,数据库会自动的为你创建一个以‘PK’打头的约束名。创建主键后,还会自动生成一个“唯一聚集索引”。删除主键后,此索引同时也被删除。

SQL中的聚簇索引和非聚簇索引什么意思?

1、聚簇索引是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。每张表只能建一个聚簇索引,并且建聚簇索引需要至少相当该表120%的附加空间,以存放该表的副本和索引中间页。

建立聚簇索引的思想是:

1.1、大多数表都应该有聚簇索引或使用分区来降低对表尾页的竞争,在一个高事务的环境中,对最后一页的封锁严重影响系统的吞吐量。

1.2、在聚簇索引下,数据在物理上按顺序排在数据页上,重复值也排在一起,因而在那些包含范围检查(between、、=、 gt;、=)或使用group by或order by的查询时,一旦找到具有范围中第一个键值的行,具有后续索引值的行保证物理上毗连在一起而不必进一步搜索,避免了大范围扫描,可以大大提高查询速度。

1.3、在一个频繁发生插入操作的表上建立聚簇索引时,不要建在具有单调上升值的列(如IDENTITY)上,否则会经常引起封锁冲突。

1.4、在聚簇索引中不要包含经常修改的列,因为码值修改后,数据行必须移动到新的位置。

1.5、选择聚簇索引应基于where子句和连接操作的类型。

聚簇索引的侯选列是:

1、主键列,该列在where子句中使用并且插入是随机的。

2、按范围存取的列,如pri_order 100 and pri_order 200。

3、在group by或order by中使用的列。

4、不经常修改的列。

5、在连接操作中使用的列。

2、SQLServer缺省情况下建立的索引是非聚簇索引,由于非聚簇索引不重新组织表中的数据,而是对每一行存储索引列值并用一个指针指向数据所在的页面。换句话说非聚簇索引具有在索引结构和数据本身之间的一个额外级。一个表如果没有聚簇索引时,可有250个非聚簇索引。每个非聚簇索引提供访问数据的不同排序顺序。在建立非聚簇索引时,要权衡索引对查询速度的加快与降低修改速度之间的利弊。另外,还要考虑这些问题:

2.1、索引需要使用多少空间。

2.2、合适的列是否稳定。

2.3、索引键是如何选择的,扫描效果是否更佳。

2.4、是否有许多重复值。

  对更新频繁的表来说,表上的非聚簇索引比聚簇索引和根本没有索引需要更多的额外开销。对移到新页的每一行而言,指向该数据的每个非聚簇索引的页级行也必须更新,有时可能还需要索引页的分理。从一个页面删除数据的进程也会有类似的开销,另外,删除进程还必须把数据移到页面上部,以保证数据的连续性。所以,建立非聚簇索引要非常慎重。

非聚簇索引常被用在以下情况:

1、某列常用于集合函数(如Sum,....)。

2、某列常用于join,order by,group by。

3、查寻出的数据不超过表中数据量的20%。


名称栏目:sqlserver聚簇,sql 聚类
文章源于:http://jkwzsj.com/article/hdjisc.html

其他资讯