ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:27.42KB ,
资源ID:6939070      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6939070.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SQL语句精化实例.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

SQL语句精化实例.docx

1、SQL语句精化实例 4. 设有一个职员表为Customers,其上有客户姓名(Name),客户ID(ID)等列,表 执行如下语句: CREATE CLUSTERED INDEX idx ON Customers(Name) 得到以下错误 Cannot create more than one clustered index 原因是什么,为什么为出错?答:说明表上已经有了聚集索引,只能在同一张表上创建一个聚集索引。因为聚集索引会决定表的物理排列,由于只可能有一种排列方法,所以只能创建一个聚集索引。 5. 设有一个职员表为Customers,其上有客户姓(Last Name),名字(First N

2、ame)客户ID(ID)等列,先在LastName 和FirstName上创建一个称为idxNames的非聚集的复合索引,然后在客户ID上创建唯一的聚集索引uidxID,说明在创建聚集索引时非聚集索引会有什么变化答: 创建聚集索引时非聚集索引将被重建,因为创建聚集索引将改变表中行的物理位置,而且在有聚集索引的表上的非聚集索引的B树的叶级存放的所有的鍵值和其对应的聚集索引的关键字,而之前的非聚集索引的B树的叶级存放的是所有的键值和其相对应的行ID。因此要进行非聚集索引的重建。 6. 如果顾客表没有索引,SQL Server如何为客户Eva Corets查找行?答:SQL Server必须执行表扫

3、描,读取表中的每一行来查找符合要求的行。 7. 一个表可以创建多少个聚集索引?答: 一个。聚集索引定义数据页的物理存储并且表中的数据只能存储在一个位置。8. 在表已经有聚集索引时,非聚集索引如何识别父行?在表没有聚集索引时,非聚集索引又如何识别数据行?答:在聚集索引存在时,非聚集索引为每一个被索引的行存储聚集索引。在没有聚 集索引时,非聚集索引存储文件ID、页码和数据行的RID。9. 不包括索引的字段的扩展会导致页拆分,页拆分将把行移动到新的页中。这种移动会对表中的非聚集索引产生什么样的影响?答:这对非聚集索引没有影响。如果存储有聚集索引,聚集的值不会改变。非聚集索引将继续指向行,因为聚集索引

4、关键字没有改变。如果没有聚集索引,在原记录的位置会留下一个转发指针指向新的记录。在任一情况下,非聚集索引不需要改变。 10. 考虑在表中的company name、last name和first name列上创建一个组合聚集索引。在创建索引时,什么是应该考虑的重点,为什么要考虑?还有更好的解决方法么?答:尽可能保持聚集索引键尽量的小。大的聚集索引键会在所有的非聚集键上产生较大的影响。聚集索引越大,其效率越低。键值增加时,该值需要占有页上更多的空间,这样的页就只能容纳少量的键值,导致聚集索引树(B树)变得更大。聚集索引越大(它就会有更多的非叶级),那么需要遍历索引树的I/O周期越长。同样的,唯一

5、的组合键最好作为非聚集索引或多索引来定义。可以考虑更好的解决方法是在customerID列(如果存在)或last name列上创建索引。如果customerID列并不存在,应该考虑使用标识属性或添加包括有通过在行中抽取数据的不同部分而衍生出来的键值的新列。创建并维护索引1. 假设你负责一家公司的数据库管理。用户向你抱怨查询据库Sales中的products表(表上建有idxProID索引)的速度太慢,你经过测试,发现可能是由于统计信息过时导致的。为了使将来不再发生这种问题,你要用哪个语句保证整个数据库的统计自动更新。 A DBCC SHOW_STATISTICS (products, idxP

6、roID) B UPDATE STATISTICS products C sp_autostats products ,ON D ALTERDATABASESales SET AUTO_CREATE_ STATISTICS ON答:D 2. 已知数据库Sales中的products表上建有idxProID索引,你想知道这个索引是个聚集索引还是一个非聚集索引,可用以下哪个语句?(不定项选择) A sp_helpindex products idxProID B sp_help idxProID C sp_help products D USE Sales GOSELECT indid FROM

7、dbo. sysindexesWHERE name = idxProID答:C3. 在你管理的数据库中有一张名为products的表,在监测products表的磁盘I/O的时候,你怀疑表的索引存在很多的碎片。已知products表在主键上有一个叫作idxProid的索引,另外还有nid1、nid2两个非聚集索引。你想使用耗费最小资源的办法重建products表上的索引, 应使用以下哪种方法。 A DBCC DBREINDEX(products) B ALTER TABLE products DROP CONSTRAINT idxProid ALTER TABLE ADD CONSTRAINT

8、primary key idxProid(.) C CREATE INDEX idxProid ON products(.) WITH DROP_EXISTING CREATE INDEX nid1 ON products(.) WITH DROP_EXISTING CREATE INDEX nid2 ON products(.) WITH DROP_EXISTING D DROP INDEX products.idxProid DROP INDEX products.nid1 DROP INDEX products.nid2 CREATE INDEX idxProid ON products

9、(.) CREATE INDEX nid1 ON products(.) CREATE INDEX nid2 ON products(.)答:A 4. 下面的一条SQL语句是用来创建一个索引的,试解释其作用。 CREATE UNIQUE CLUSTERED INDEX index1 ON table1(column1,column4 DESC) WITH PAD_INDEX, FILLFACTO = 60, DROP EXISTING答:该语句将在名为table1表上的column1和column4上建立一个组合的唯一聚集索引。另外column4上指定 DESC表示在该行上的排序次序为降序。另

10、外在WITH中指定了FILLFACTO = 60这将使索引的页级只有60%被填满,还指定了PAD_INDEX这将使索引的非页级也只有60%被填满。最后WITH中还指定了DROP_EXISTING,这里如果原表中存在名为index1的索引,则它的特性将会上述语句所更改,使用这个选项的优点是我们不用删除一已存在的索引再重建它。 5. table1(存在于db1数据库上)上存在有一个index1索引,执行下列SQL语句 SELECT id, indid, reserved, used, origfillfactor, name FROM db1.dbo.sysindexes WHERE name =

11、 index1 返回 Id indid reserved used origfillfactor name209452452 1 20 20 60 index1(1 row(s) affected)试说明SQL语句和返回的结果.答: SQL语句在db1的系统索引表sysindexes查找名字为index1行的相关信息,也就是从系统索引表中找出索引index1的相关信息。 返回值中,id表示的是index1的ID值,indid为1表示该行是一个聚集索引的信息,reserved表示系统为索引分配的页面数,used表示该索引用的页面总数,origfillfactor表示索引创建时指定的FILLFAC

12、TO的值,默认为0,但在index1的创建中已指定了60,最后一列name表示索引名。6. 你是负责管理大型客户数据库的数据库管理员。最近,当提交客户定单时,定单处理部门发现系统反映时间变慢。你的经验告诉你在Orders和Order Details表中的索引是正确的。是什么原因导致执行变慢了呢?答:索引统计可能没有被自动地维护,因此,随着数据的修改它将越来越过时。FILLFACTOR选项需要被重新应用到为新的定单(行)分配的表和索引空间上,而新的定单是要插入到Orders和Order Details表中的。 7. SQL Server自动创建和更新统计信息有什么好处?答:让查询优化器自动创建和

13、更新统计表来可以减少管理负担并增加查询性能。8. 你负责维护销售部门接受客户定单的数据库。销售数据库执行性能差。你的经理让你在两天内改善性能。解决这个问题的最恰当工具是什么?答:用索引优化向导。第一天,创建一个工作负荷文件用于记录一整天的用户活动。在第二天,对工作负荷文件运行索引优化向导,查看索引分析并应用索引优化向导建议的索引。实现视图1. 你负责维护一个电信公司的数据库,不久前你在数据库上创建了一个视图vwOrders,并且在创建视图时使用了WITH SCHEMABINDING选项。现在你要修改这个vwOrders视图,增加一个WITH CHECK OPTION的选项。要求不能改动原有的选

14、项,你要怎么做呢?(双项选择) A删除vwOrders,并用WITH SCHEMABINDING和WITH CHECK OPTION选 项重建视图 B删除vwOrders,并用WITH CHECK OPTION选项重建视图 C改变视图,并用WITH SCHEMABINDING和WITH CHECK OPTION选项 D改变视图,并用WITH CHECK OPTION选项 答: AC 2. 你是公司的数据库管理员,有一天你要删除数据库中的一个视图 vwOrders(创建时没有使用WITH ENCRIPTION)时,系统提示存在其它视图依赖此视图,从而删除失败,你要怎么知道是哪个视图依赖这个视图呢

15、?(不定项选择) A通过查询系统表syscomments来得到视图的定义,从而得到依赖信息 B使用sp_helptext vwOrders来得到视图的定义,从而得到依赖信息 C使用 sp_depends vwOrders,来得到依赖信息 D 查询INFORMATION_SCHEMA.VIEW_TABLE_USAGE视图来得到依赖信息答:C3. 用下述语句创建视图 CREATE VIEW ProductsView AS SELECT ProductID, Price, Company FROM Supplier INNER JOIN Products ON Suppliers.ID = Prod

16、ucts.SupplierID ORDER BY ProductID 出现错误,为什么,如何修改。答: 因为在视图的创建中如果包含了ORDERBY子句,则要使用TOP语句才能生成视图。设我们要选出全部符合条件的记录,语句可改为如下:CREATE VIEW ProductsViewAS SELECT TOP 100 PERCENT ProductID, Price, CompanyFROM Supplier INNER JOIN ProductsON Suppliers.ID = Products.SupplierIDORDER BY ProductID4. 在SQL Server上的North

17、wind数据库上创建这样一个叫作vwCustomerOrders的视图,视图中使用SELECT语句在以Orders表中的订单ID、Customers数据表中的公司名称(CompanyName)的和联系名称(ContactName),通过客户ID联接起来,并授于sales帐户在视图上的查询权限,写出创建视图,和授予权限的SQL语句,并说明sales帐户要具有在Orders和Customers表中的查询权限吗?答:语句如下:USE NorthwindGOCREATE VIEW vwCustomerOdersAS SELECT o.OrderID, c.CompanyName, c.ContactN

18、ameFROM Orders o JOIN Customers cON o.CustomerID = c.CustomerIDGOGRANT SELECT ON vwCustomerOders TO sales另外,sale帐户不用具有Orders和Customers表中的查询权限,也可以对视图进行查询。5. 视图的优点是什么?答: 通过使用视图用户可以把注意力放在需要的数据上,也可以使用户对数据的操作变得简单。对用户来说,数据库和查询的复杂性被隐藏了,这样可以让用户看到更友好的名字。通过只允许用户访问视图中数据的这种方法,视图提供了一种安全机制。在视图上创建索引和通过视图分割数据可以优化性能

19、。6. 假设已经实现了联接Customer、Orders和Order Details表的查询,它列出了顾客订单的详细情况,例如物品的数量和要求的交货日期。在顾客改变现有的订单时,雇员需要更新Orders表和Order Details表。在不具有访问基表权限的情况下如何完成该任务?答: 在查询上创建一个名为OrderDetailsView的视图。在视图上授权RequiredDate和Quantity列的更新权限。这样确保雇员只在Orders和Order Details表更新这些列。7在视图定义中使用WITH CHECK OPTION有什么益处? 答: 该选项强制视图上所有数据修改语句都要符合定义

20、视图的SELECT中定义的准则。8在使用视图时应该考虑什么?答:视图中引用的对象在创建视图时进行验证。为了使分配给视图的权限得到维护,可以修改视图。删除或修改基础表时会影响视图,如果视图的所有者不是dbo用户,用户的名字必须作为视图名字的一部分来指定。同一所有者必须拥有视图相关的所有对象以避免破坏所有权链。复杂性的隐藏会产生难以确定原因的性能问题。实现存储过程1. 创建一个名为FindCustomer存储过程,可以用它来找出SQLSERVER中的northwind数据库的Customer表中,CustomerID为指定值(输入参数)的记录的ContactName字段的名称,然后调用这个存储过程

21、,找出CustomerID为thecr的ContactName字段值,写出创建存储过程的SQL语句和调用的命令,以下选项哪一个是正确的。A创建语句:USE northwindGO CREATE PROCEDURE dbo. FindCustomer$CustomerID char(5)LIKESELECT contactName From Customers WHERE CustomerID=$CustomerID调用语句EXEC northwind.dbo. FindCustomer$CustomerID= thecrB创建语句:USE northwindGO CREATE PROCEDUR

22、E dbo. FindCustomerCustomerID char(5)ASSELECT contactName From Customers WHERE CustomerID=CustomerID调用语句EXEC northwind.dbo. FindCustomerCustomerID= thecr C创建语句:USE northwindGO CREATE PROCEDURE dbo. FindCustomerCustomerID char(5)ASSELECT contactName From Customers WHERE CustomerID=CustomerID调用语句EXEC

23、northwind.dbo. FindCustomerCustomerID= thecrD创建语句:USE northwindGO CREATE PROCEDURE dbo. FindCustomerCustomerID char(5)LIKESELECT contactName From Customers WHERE CustomerID=CustomerID调用语句EXEC northwind.dbo. FindCustomerCustomerID= thecr答: B2. 你在northwind数据库中创建了一个名为overdueOrders的储存过程,而且没被加密。那么以下哪些方法可

24、以查看存储过程的内容。(不定项选择)A EXEC sp_helptext overdueOrdersB EXEC sp_help overdueOrdersC EXEC sp_stored_procedures overdueOrdersD EXEC sp_depends overdueOrdersE 查询syscomments系统表F 查询sysobjects系统表答: AE3. 创建一个名为FindCustomer1的存储过程,可以用它来找出SQL SERVER中的northwind数据库的Customer表中,CustomerID为指定值(输入参数)的记录的ContactName字段的名

25、称,另外指定一个输出参数LineNum做为输出参数,还有必须在存储过程中判断CustomerID不能为空串,是的话要打印出出错信息,并返回错误值-1,如果查询成功在输出变量LineNum中保留选出的行数,然后返回值0。写出相应的SQL语句.答: USE NorthWindGOCREATE PROC FindCustomer3LineNum int OUTPUT,CustomerID char (5)ASIF LEN(CustomerID)=0BEGINPRINT You must supply a valid CustomerIDRETURN -1ENDSELECT contactName F

26、rom Customers WHERE CustomerID=CustomerID SET LineNum = ROWCOUNTRETURN 0 4. 首先自定义一个错误号为50512的用户自定义错误,错误的严重级别为10,错误的文本消息为Cant find the customer ID. ,另外消息中还要加上表名和输入的CustomerID, 并且当发生消息时将消息写入 Microsoft® Windows NT® 应用程序日志中。然后创建一个名为ExistCustomerID的存储过程,以用它来找出SQL SERVER中的northwind数据库的Customer表中,指

27、定的CustomerID是否存在,如果存在返回0,如果不存在返回错误号50512,并将消息写入 Microsoft® Windows NT® 应用程序日志中。写出定义错误消息和创建存储过程的语句。答: 定义自定义错误消息EXEC sp_addmessagemsgnum = 50512,severity = 10,msgtext = Cant find the customer ID:%s at table %s., with_log =true创建存储过程的语句如下USE NorthWindGOCREATE PROC ExistCustomerIDCustomerID char

28、 (5)ASSELECT CustomerID From Customers WHERE CustomerID=CustomerID IF ROWCOUNT=0 BEGIN RAISEERROR(50512, 10, 1, CustomerID, DBNAME)RETURNENDRETURN 05. 已经创建了一个从数据库中删除客户的存储过程。在删除事务完成时,希望有一个自定义的错误信息写入Windows 2000应用程序日志。如何执行该任务?答: 通过在sp_addmessage存储过程中指定with_log参数创建一个自定义的错误信息。删除事务提交后,在存储过程中调用RAISERROR语句

29、来生成自定义的错误信息。6. 希望工资管理部门的用户可以在payroll数据库中插入、更新和删除数据。然而,不希望他们有访问基表的权限。那么除了创建一个视图以外,还能如何实现该目标?答: 创建实现单一任务的存储过程。在存储过程中给工资管理部门的用户授予EXECUTE的权限。7. 在数据库中必须修改一个存储过程,而有几个用户已被授予了执行该存储过程的权限。执行哪个语句来完成修改而又不影响现有的权限?答: ALTER PROC。如果执行DROP PROC和CREATE PROC语句来实现想要的修改,必须再次授予用户EXECUTE权限。实现用户定义函数1. 你是某大型商场的数据库开发人员,要实现对商品的销售情况的复杂统计。这个统计每次根据用户提供的一个商品代号,访问一些表中的数据进行统计,最后返回一个值。你要在SELECT、UPDATE和DELETE语句中使用这个计算的结果。哪种实现方法最有效?A.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1