首页 > 编程知识 正文

索引存储结构的优点是节省时间和空间,查找效率高

时间:2023-05-05 17:39:29 阅读:204135 作者:3446

最近对于视图、fzdhh、存储过程的定义及优缺点进行了详细的学习,下面是学习过程中总结的一些知识点,拿出来与大家一起分享,有总结的不到位的地方欢迎大家留言指教。 视图: 视图的定义:

视图是一个虚拟表,存储在数据库中的查询的SQL 语句,视图中的数据来自于一张或者多张基础表,但是不占用数据库物理内存,对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)、删除。

视图的作用:

* 简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

* 安全性。通过视图用户只能查询和修改他们所能见到的数据。但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:

* 逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。

视图的优点:

1. 视点集中

视图集中即是使用户只关心它感兴趣的某些特定数据和他们所负责的特定任务。这样通过只允许用户看到视图中所定义的数据而不是视图引用表中的数据而提高了数据的安全性。

2. 简化操作

视图大大简化了用户对数据的操作。因为在定义视图时,若视图本身就是一个复杂查询的结果集,这样在每一次执行相同的查询时,不必重新写这些复杂的查询语句,只要一条简单的查询视图语句即可。可见视图向用户隐藏了表与表之间的复杂的连接操作。

3. 定制数据

视图能够实现让不同的用户以不同的方式看到不同或相同的数据集。因此,当有许多不同水平的用户共用同一数据库时,这显得极为重要。

4. 合并分割数据

在有些情况下,由于表中数据量太大,故在表的设计时常将表进行水平分割或垂直分割,但表的结构的变化却对应用程序产生不良的影响。如果使用视图就可以重新保持原有的结构关系,从而使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。

5. 安全性

视图可以作为一种安全机制。通过视图用户只能查看和修改他们所能看到的数据。其它数据库或表既不可见也不可以访问。如果某一用户想要访问视图的结果集,必须授予其访问权限。视图所引用表的访问权限与视图权限的设置互不影响。

视图的安全性

视图的安全性可以防止未授权用户查看特定的行或列,使用户只能看到表中特定行的方法如下:

1 在表中增加一个标志用户名的列;

2 建立视图,是用户只能看到标有自己用户名的行;

3 把视图授权给其他用户。

逻辑数据独立性

视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立:

1 如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。

2 如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。

3 如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。

4 如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。

视图的缺点:

 

1.性能。
SQL Server必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server也把它变成一个复杂的结合体,需要花费一定的时间。
2.修改限制。
当用户试图修改视图的某些行时,SQL Server必须把它转化为对基本表的某些行的修改。事实上,当从视图中插入或者删除时,情况也是这样。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的,这些视图有如下特征:
a.有UNIQUE等集合操作符的视图。
b.有GROUP BY子句的视图。
c.有诸如AVGSUMMAX等聚合函数的视图。
d.使用DISTINCT关键字的视图。
e.连接表的视图(其中有些例外)

创建视图的限制:

在创建视图时,还要注意试图必须满足以下几点限制:
<1>.不能将规则或者DEFAULT定义关联于视图。
<2>.定义视图的查询中不能含有ORDER BYCOMPURERCOMPUTER BY 子句和INTO关键字
<3>.如果视图中某一列是一个算术表达式、构造函数或者常数,而且视图中两个或者更多的不同列拥有一个相同的名字(这种情况通常是因为在视图的定义中有一个连接,而且这两个或者多个来自不同表的列拥有相同的名字),此时,用户需要为视图的每一列指定列的名称。

fzdhh: fzdhh的定义:

fzdhh是对数据库表中一列或多列的值进行排序的一种结构,使用fzdhh可快速访问数据库表中的特定信息。fzdhh通常分为:唯一fzdhh、主键fzdhh、聚集fzdhh。

fzdhh的优点:

创建fzdhh可以大大提高系统的性能。

第一,通过创建唯一性fzdhh,可以保证数据库表中每一行数据的唯一性。

第二,可以大大加快数据的检索速度,这也是创建fzdhh的最主要的原因。

第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

第五,通过使用fzdhh,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 

fzdhh的缺点:

第一,创建fzdhh和维护fzdhh要耗费时间,这种时间随着数据量的增加而增加。

第二,fzdhh需要占物理空间,除了数据表占数据空间之外,每一个fzdhh还要占一定的物理空间,如果要建立聚簇fzdhh,那么需要的空间就会更大。

第三,当对表中的数据进行增加、删除和修改的时候,fzdhh也要动态的维护,这样就降低了数据的维护速度。

适用条件及不适用条件:

通常应该在这些列上创建fzdhh:在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建fzdhh,因为fzdhh已经排序,其指定的范围是连续的;在经常需要排序的列上创建fzdhh,因为fzdhh已经排序,这样查询可以利用fzdhh的排序,加快排序查询时间;在经常使用在WHERE子句中的列上面创建fzdhh,加快条件的判断速度。

 

通常不应该创建fzdhh的的这些列具有下列特点:

第一,对于那些在查询中很少使用或者参考的列不应该创建fzdhh。这是因为,既然这些列很少使用到,因此有fzdhh或者无fzdhh,并不能提高查询速度。相反,由于增加了fzdhh,反而降低了系统的维护速度和增大了空间需求。

第二,对于那些只有很少数据值的列也不应该增加fzdhh。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加fzdhh,并不能明显加快检索速度。

第三,对于那些定义为text, image和bit数据类型的列不应该增加fzdhh。这是因为,这些列的数据量要么相当大,要么取值很少。

第四,当修改性能远远大于检索性能时,不应该创建fzdhh。这是因为,修改性能和检索性能是互相矛盾的。当增加fzdhh时,会提高检索性能,但是会降低修改性能。当减少fzdhh时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建fzdhh。

存储过程: 存储过程的定义:

存储过程(Stored Producedures)是一组为完成特定功能的SQL语句集,经编译后存储在数据库中。它能够包含执行各种数据库操作的语句,并且可以调用其他的存储过程;能够接受输入参数,并以输出参数的形式将多个数据值返回给调用程序(Calling Procedure)或批处理(Batch);向调用程序或批处理返回一个状态值,以表明成功或失败(以及失败的原因)。

存储过程的优点:

1.执行速度快。
存储过程只在创造时进行编译,已经通过语法检查和性能优化,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.允许组件式编程。
经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。只需创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。在代码上看,SQL语句和程序代码语句的分离,可以提高程序代码的可读性。
存储过程可以设置参数,可以根据传入参数的不同重复使用同一个存储过程,从而高效的提高代码的优化率和可读性。
3.减少网络流量。
一个需要数百行Transact-SQL代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。
对于同一个针对数据库对象的操作,如果这一操作所涉及到的T-SQL语句被组织成一存储过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句。从而减轻了网络流量,降低了网络负载。
4.提高系统安全性。
可将存储过程作为用户存取数据的管道。可以限制用户对数据表的存取权限,建立特定的存储过程供用户使用,避免非授权用户对数据的访问,保证数据的安全。

存储过程的缺点:

1.移植性差。

依赖于数据库厂商,难以移植(当一个小系统发展到大系统时,对数据库的要求也会发生改变);
2.难以调试、维护。

业务逻辑大的时候,封装性不够,难调试难以维护;
3.服务器不能负载均衡。

复杂的应用用存储过程来实现,就把业务处理的负担压在数据库服务器上了。没有办法通过中间层来灵活分担负载和压力.均衡负载等。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。