MS SQL入门基础:索引视图
MS SQL入门基础:索引视图
收藏
在前面我们已经提到过有关视图的下述观点:由于视图返回的结果集与具有行列结构的表有着相同的表格形式,并且我们可以在SQL
语句中像引用表那样引用视图,所以我们常把视图称为虚表。标准视图的结果集并不以表的形式存储在数据库中,而是在执行引用了视图的查询时,SQL
Server 2000 才把相关的基本表中的数据合并成视图的逻辑结构。
上面的结论常让我们产生这样的焦虑:由于是在执
行了引用了视图的查询时,SQL Server 2000
才把相关的基本表中的数据合并成视图的逻辑结构,那么当查询所引用的视图包含大量的数据行或涉及到对大量数据行进行合计运算或连接操作,毋庸置疑,动态地
创建视图结果集将给系统带来沉重的负担,尤其是经常引用这种大容量视图。
解决这一令人头痛问题的方法就是为视图创建聚簇索引,只有这样才会显著地提高系统的性能。当在视图上创建了聚簇索引后,视图的结果集与有聚簇索引的表的数据集一样是存储在数据中的。
此外,在视图上创建索引还会带来这样的好处;优化器可以在那些在from 从句中不直接命名视图的查询中使用视图索引,而且对已存在的视图而言,由于不必重新编写查询代码,从而提高了查询从索引视图中检索数据的效率。
如果在视图上创建索引,那么视图中的数据会被立即存储在数据库中,对索引视图进行修改,那么这些修改会立即反映到基础表中。同理,对基础表所进行的数据修改也会反映到索引视图那里。索引的惟一性大大提高了SQL Server 查找那些被修改的数据行。
维护索引视图比维护基础表的索引更为复杂。所
以,如果认为值得以因数据修改而增加系统负担为代价来提高数据检索的速度,那么应该在视图上创建索引。在为视图创建索引前,视图本身必须满足以下条件:
在执行CREATE VIEW 命令时,必须将ANSI_NULLS 和QUOTED_IDENTIFIER选项设置为ON 状态;
在使用CREATE TABLE 命令创建索引所引用的基础表时,ANSI_NULLS 选项应设置为ON;
该视图所引用的对象仅包括基础表而不包括其它的视图; 视图所引用的基础表必须与视图同属于同一数据库且有相同的所有者;
在创建视图时必须使用SCHEMABINDING 选项;
如果视图引用了用户自定义函数,那么在创建这些用户自定义函数时也必须使用SCHEMABINDING 选项 ;
视图必须以owner.objectname 的形式来使所引用的表或用户自定
相关文档:
SQL数据库常用命令-创建,删除表-添加,修改,删除字段
http://blog.csdn.net/cncco/archive/2009/08/08/4424555.aspx
'创建表
CREATE TABLE dbo.CategoriesNew
(CategoryID intIDETITY (1,1) NOT NULL,
CategoryName nvarchar(15) NOT NULL,
Description ntext NULL,
Picture image NULL)
'删除表
DROP TABL ......
表jh03有下列数据:
name score
aa 99
bb 56
cc 56
dd 77
ee 78
ff 76
gg 78
ff 50
1. 名次生成方式1,Score重复时合并名次
SELECT * , Place=(SELECT COUNT(DISTINCT Score) from jh03 WHERE Score >= a.Score)
from jh03 a
ORDER BY Place
结果
Name Score Pla ......
书签:清除所有书签。 CTRL-SHIFT-F2
书签:插入或删除书签(切换)。 CTRL+F2
书签:移动到下一个书签。 F2 功能键
书签:移动到上一个书签。 SHIFT+F2
取消查询。 ALT+BREAK
连接:连接。 CTRL+O
连接:断开连接。 CTRL+F4
连接:断开连接并关闭子窗口。 CTRL+F4
数据库对象信息。 ALT+F1
编辑:清除活动 ......
1 Export data to existing EXCEL file
from SQL Server table
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * from [SheetName$]') select * from SQLServerTable
2 Export data from Excel to new SQL Server table
select *
into SQLServerTab ......
/*获取重复记录中较小的那个ID*/ create table tmp_Repeat as select min(id) as id from poi group by idcode having count(*) >1; /*备份删除的数据*/ select * from poi where id in (select id from tmp_repeat) /*删除重复记录中ID较小的那条
select replace('阿桂是个好孩子','阿桂','小贤') from du ......