- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
正确创建合理使用索引 提高数据库查询速度.doc
正确创建合理使用索引 提高数据库查询速度
【摘要】在数据库系统中,一条SQL查询语句的实现可有多种不同的表达方法,而不同的表达方法又会使数据库系统的响应速度大相径庭。深入讨论了在数据库中,怎样正确创建和使用索引,通过合理书写SQL语句来优化查询,充分发挥索引的特性,进一步提高数据查询速度,使系统性能得到更充分有效的改善和提高。
【关键词】数据库;索引;优化;查询;效率
0 引言
在数据库管理系统中,索引是在数据表列上建立的一种数据库对象,是数据库中重要的辅助数据结构。它是可选的,如果不使用索引,所有的数据查询将通过表扫描实现,这就意味着一个表中的所有数据必须都被读入,并且与所请求的数据进行逐行比较,这将产生大量的I/O 操作(除非要从该表中选择绝大多数的行)。对于大型的表,执行表扫描将消耗大量的系统资源。
索引的引用虽然是由系统决定的,但它与创建索引时编写SQL语句的格式密切相关。一个合理的索引和一个好的SQL查询语句往往可以使系统性能提高几倍乃至数十倍,下面就以Oracle为例来讨论索引的创建、使用和查询方法。
1 索引键和唯一索引
1.1 索引键。索引键是用于创建索引的列。如果要通过索引访问一条记录,那就必须在SQL语句的WHERE子句内部包含一个或多个索引键。
1.2 惟一索引。惟一索引就是要求插入到索引字段的值必须是惟一的,不允许有重复的键值被插入。对于复合键,这意味着所有列的值的组合必须是惟一的。
2 创建和使用索引的原则
2.1 选择索引类型应考虑的因素。位图索引适用于那些基数(基数是指某个字段可能拥有的不重复数值的个数,比如sex字段的基数为2,因为性别只能是男或女)比较小的字段。通常如果字段的基数只达到表中记录数的1%,或字段中大部分值都会重复出现100次以上,则对该字段应建立位图索引。此外,某些字段虽然有比较高的基数,也不会出现很多重复值,但经常会被具有复杂查询重要条件的WHERE子句引用,也应为其建立位图索引。而B+树索引则适用于那些具有高基数的字段,特别是那些具有PRIMARY KEY、UNIQUE约束的不能具有重复值的字段。如果字段的特性介于上述两2种情形之间,则(1)考虑是否需要节省存储空间。B+树索引将占用大量的存储空间;而位图索引通常只占用很少的存储空间。(2)对于一些特殊类型的查询语句,位图索引能比B+树索引更有效地提高查询速度。比如,如果在查询的WHERE子句中包含AND、OR等逻辑运算符,使用位图索引可以极大地提高查询的执行速度,因为逻辑运算可以直接在位图索引内部完成。(3)对于另外一些查询语句,B+树索引能比位图索引更有效地提高查询速度。比如,那些经常会使用“”等比较运算符进行查询的字段,应当使用B+树索引而不是位图索引,这是由B+树数据结构的有哪些信誉好的足球投注网站特性决定的。(4)在位图索引中可以记录具有NULL值的字段,而在B+树索引中将忽略所有NULL值字段。因此,如果某个字段需要进行与NULL值相关的查询,应当为它创建位图索引。
2.2 创建索引的原则。(1)当表主要是为了查询时,可以考虑创建索引;否则在数据频繁插入、更新、删除时系统要花费大量的时间开销来维护在索引上的操作,反而影响性能。(2)应该为较大的表创建索引。表越大索引的作用就越显著,效率也越高。(3)对一个表可建立多个索引,但建议一般最多不超过5个。因为太多的索引不仅要占用更多的磁盘空间,而且还会由于较大的索引维护工作而降低插入、更新及删除的速度。(4)创建索引时应选择适当的列:1)经常要查询的列;2)选择性比较好的列;3)经常要进行排序和分组的列;4)经常用于多表连接的列;5)在WHERE子句中频繁使用的列。(5)创建索引应选择适当的表空间。在创建索引时可以把索引存放在任何表空间中,默认情况下Oracle会自动把索引和它所对应的基表存放在同一个空间内。但在创建索引时也可以显式地指定存储表空间,可以把索引存放在与其基表不同硬盘上的不同表空间中,这样比和基表同在一个表空间内更能提高查询速度。因为这样Oracle能够并行读取不同硬盘中的数据,避免产生I/O冲突。
2.3 不使用索引的准则。在下列情况下,一般不使用索引:(1)数据记录不多的表;(2)如果查询经常返回的行数超过总行数的10%;(3)如果被索引的列太长(如超过50个字节)。
2.4 复合索引的应用。复合索引允许用户在同一张表上的2个或多个列上建立索引,是具有多列排码的索引。对于经常需要将多个列作为一个整体同时查询的场合,复合索引往往要比创建多个单列索引更加可取。其优点如下:(1)在数据处理过程中比多个单列索引开销要少;(2)对数据修改语句的性能影响较小;(3)能有效地减少表中索引的总数,充分节约磁盘空间;
文档评论(0)