笔者认为对于数据库索引的作用,应该分两面看。除了肯定其对数据库性能带来的正面影响外,还需要认识到其可能带来的负面影响。只有如此,数据库管理员才能够在正确的场合使用正确的索引。要知道有时候一个错误的索引可能引发死锁,并导致数据库性能的急剧下降或进程终止;而如果数据库管理员能够做出一个正确的判断的话,那么可以使那些本来要运行几个小时甚至一天的进程在几分钟之内就能够完成。所以这两个差距是一个天上、一个地下。故笔者希望通过这篇文章能够让各位读者了解索引在使用过程中的限制,了解索引并不是万能的。
一、索引对数据库性能的影响跟数据选择性直接挂钩。
当用户从数据表中查询数据时,Oracle数据库提供了两种查询的方式。一是从表中读取每一行,就是大家常说的全表扫描;二是通过ROWID一此读取一行。当表中记录比较多的时候,很明显第二种方式能够更快的定位记录内容。而索引其实就是建立在这个查询原理之上的。如现在某个表中有300多万条记录,而现在用户可能只需要了解其中的10条记录信息。此时如果使用索引标识读取的块,则可以执行比较少的I/O,数据库系统会很快找到用户所需要的内容。而如果没有使用索引的话,则需要读取表中所有的块。
如果在这个表中加入了索引,那么到底对数据库的性能影响有多大呢?这个就不好说了,因为其跟很多因素相关。如跟数据选择性直接相关。如果用户的数据非常具有选择性,则表中家功能只有很少的行匹配索引值,则Oracle将能够快速查询匹配所引值得ROWID的索引,并且可以快速查询少量的相关表快。如还是上面这个表中,其如果存储有某个市的所有常住人口信息,其中身份证号码肯定是少不了的。如此时用户想根据身份证号码来查询某个人的信息时,那么数据库能够在很短的时间内给出响应。这主要是因为用户提供的数据非常具有选择性,基本上跟数据库中的索引值是一一对应的。而如果用户想通过出身年月信息来查询信息的话,则其数据库反映的速度就会比较慢了。
可见索引对数据库性能的影响直接跟数据的选择性挂钩。这对于数据库管理员设计索引时很有启发性。如数据库管理员在设计索引时,最好能够选择哪些具有唯一性的字段或者重复性比较少的字段。如此的话,索引对于数据库性能来说才有比较大的价值。
二、索引效果跟数据库中记录的具体存储位置相关。
还是上面这张表中,如果现在用户想查找年龄超过100岁的老人,要对他们去进行慰问。假设现在符合这个条件的人只有10人。那么此时索引对数据库性能会有怎么样的影响呢?此时显然数据非常具有选择性,但是并不一定索引能够起到很好的效果。这还要看其具体存储的位置。如果这十条记录在硬盘中存储的物理位置比较近,如可能在同一个扇区之内,则此时索引对于数据库性能的影响就会比较大,能够在最短时间内找到符合条件的数据。但是如果相关的行在表中存储的位置并不互相靠近,则这个索引的效果就会逐渐减少。因为如果匹配索引值的数据分散在硬盘上的多个酷爱时,则必须从表中选择多个单独的块以满足查询。
数据库管理员对于这一点要特别注意。因为此时如果数据库管理员查用了索引的话,那么很可能是画蛇添足。笔者建议,当数据库管理员发现数据分散在表的多个块的时候,最好是不要使用索引,而是执行全表扫描。此时执行扫描反而会比执行索引的效率更高。因为在执行全表扫描的时候,Oracle数据库系统会使用多块读取以加速扫描表。而如果采用索引的话,则其读取数据时是单块读取的。而由于数据存储在多个块中,所以其读取的速度反而会更慢。
由此可见,Oracle数据库管理员在数据库设计与日常维护中,也要想办法能够让数据尽量存储在临近的位置。如尽量减少在同一个服务器中不要部署不同的应用服务,防止硬盘产生过多的磁盘碎片;如需要采用多块硬盘的话,则最好通过表空间把类似的表放在同一个表空间中,从而让相关的行在表zhognd存储位置尽量靠近,以提高索引的使用效果。也就是说,数据库管理员在使用索引的时候,为表中的字段建立了索引这只是其工作的第一步。在后续数据库维护与调整的过程中,仍然要注意数据存储位置对索引的影响。
分享到:
相关推荐
PHP 应用程序中出现的五个常见数据库问题可以通过使用 PEAR DB 模块或 PDO、自动增量功能、事务、索引和 Prepared Statements 等技术来解决。这些技术可以提高代码的可读性、可维护性、性能和安全性。
附录一、GRI索引表–一般标准揭露.pdf
.Net开发:揭露.NET框架中使用的设计模式
"图书馆新书介绍题录索引" 本次新书介绍题录索引所收录的图书,都是经典的文学作品和历史典籍,涵盖了神魔小说、纪传体通史、文学集、兵书、童话等多种体裁。下面是对每一本书的详细介绍: 一、《封神演义》 ...
对于支持更早期版本的Android系统,你可能需要使用V7 AppCompat库中的`android.support.v7.widget.AppCompatButton`,并使用`app:backgroundTint`属性来设置颜色。 总的来说,通过理解和应用Material Design的水波...
为了确保工作面在过断层、揭露尾巷等常见复杂地质条件时的安全,通过加强工作面过断层及揭露尾巷时的工程质量管理,并采用现场跟踪测量高差对工作面截割层位及时调整,实现了工作面过断层和揭露尾巷的安全。实践表明:...
晋城宏圣建筑工程有限公司在承担常店东回风大巷南掘揭露3#煤层的施工工作时,应用全面质量管理理论,贯彻全过程控制理念,从施工前准备阶段、施工阶段和竣工阶段制定了质量控制措施,从而提高揭露煤层工作的建设质量,...
杀不死的秘密-反汇编揭露黑客免杀变种技术.pdf
在矿井采掘作业中,揭露煤层和贯通老空、老巷是一项高风险的工作,需要严格遵循《煤矿安全规程》的相关规定,以确保作业过程的安全。以下是一些关键的技术措施: 1. 打眼: - 掘进至距煤层20米时,需进行探眼作业...
在新闻报道领域,医疗新闻因其专业性和复杂性,往往需要具备更高的深度和力度来吸引读者并传递准确的信息。本文将围绕“医疗新闻如何彰显深度和力度”这一主题,深入探讨如何提升医疗新闻的质量和影响力。 首先,...
### 揭露现象看本质,快狗打车中台建设12个问题 #### 中台概念及区别 中台的概念源自阿里巴巴集团,并逐渐被全球众多企业所采纳。它旨在通过构建一套灵活的服务体系来支持企业的多条业务线,提高整体运营效率。与...
本文主要以黄陵矿业有限公司一号煤矿四盘区灾害治理探查巷为工程实例,介绍了掘进工作面揭露小煤窑老巷,采取的隐蔽致灾因素探查方法,并根据灾害探查实际情况,制定揭露小煤窑老巷灾害防控措施及掘进支护技术方案,保证...
基于java开发的仿微博、酷安点击加号揭露动画弹出菜单+背景模糊效果+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于java开发的...
使用的PopupWindow实现的,主要部分有 背景揭露动画;+ 旋转动画;菜单项弹出动画;背景模糊效果 注意:在gradle中开启renderscript,支持模糊效果(高斯模糊也叫毛玻璃) defaultConfig { applicationId ...
揭露软件作者放后门方法
详细讲解了揭露进程伪装术,很好,很值得下载
在锦界煤矿案例中,探眼布置包括在集中回风巷二段掘进方向的右帮正对联巷处开深6m、宽5m、高2.8m的硐室,并在硐室内布置钻眼,钻孔深度为70-80米。此外,还要在掘进6m硐室前由连采五队施工深7.5m麻花钻眼,以确保...
OAuth中的关键术语: - oauth_consumer_key:开发者注册应用后,服务提供者分配的应用ID。 - oauth_consumer_secret:与oauth_consumer_key对应的密钥,用于身份验证。 - oauth_token:授权后获取的Access Token,是...
这需要使用各种挖掘工具和技术,系统地清理、揭露和记录遗迹和遗物。 3. 遗物分析:对发掘出来的文物进行分类、鉴定和年代测定。利用物理学、化学、生物学等自然科学方法进行分析,如放射性碳测年、热释光测年等。 ...