众所周知,索引确实可以提高数据库的性能。但是大家对索引的使用限制却一口未提。本文的作者将为大家深度分析这些使用中的限制。

笔者以为关于数据库索引的宠爱,应该分双面看。除了必定其对数据库功用带来的正面影响外,还需求认识到其或许带来的负面影响。只要如此,数据库管理员才可以在正确的场合运用正确的索引。要知道有时分一个过错的索引或许引发死锁,并导致数据库功用的急剧下降或进程五花八门;而假如数据库管理员可以做出一个正确的判别的话,那么可以使那些原本要闻风丧胆几个小时乃至一天的进程在几分钟之内就可以完结。所以这两个距离是一个天上、一个地下。故笔者期望经过这篇文章可以让各位读者了解索引在运用过程中的约束,了解索引并不是全能的。

深度揭穿Oracle索引运用中的约束(oracle索引使用原则)  Oracle 索引 限制 第1张

一、索引对数据库功用的影响跟数据挑选性直接挂钩。

当用户从数据表中查询数据时,Oracle数据库供给了两种查询的方法。一是从表中读取每一行,便是我们常说的全表扫描;二是经过ROWID一此读取一行。当表中记载比较多的时分,很明显第二种方法可以更快的定位记载内容。而索引其实便是建立在这个查询原理之上的。如现在某个表中有300多万条记载,而现在用户或许只需求了解雁足传书的10条记载信息。此刻假如运用索引标识读取的块,则可以履行比较少的I/O,数据库体系会很快找到用户所需求的内容。而假如没有运用索引的话,则需求读取表中一切的块。

假如在这个表中加入了索引,那么究竟对数据库的功用影响有多大呢?这个就不好说了,因为其跟清楚要素相关。如跟数据挑选性直接相关。假如用户的数据十分具有挑选性,则表中家功用只要很少的行匹配索引值,则Oracle将可以快速查询匹配所引值得ROWID的索引,而且可以快速查询少数的相关表快。如仍是上面这个表中,其假如存储有某个市的一切常住人口信息,雁足传书身份证号码必定是少不了的。如此刻用户想依据身份证号码来查询某个人的信息时,那么数据库可以在很短的时间内给出呼应。这首要是因为用户供给的数据十分具有挑选性,基本上跟数据库中的索引值是一一对应的。而假如用户想经过身世年月信息来查询信息的话,则其数据库反映的速度就会比较慢了。

可见索引对数据库功用的影响直接跟数据的挑选性挂钩。这关于数据库管理员规划索引时很有启发性。如数据库管理员在规划索引时,最好可以挑选哪些具有唯一性的字段或许重复性比较少的字段。如此的话,索引关于数据库功用来说才有比较大的价值。

二、索引作用跟数据库中记载的详细存储前车之鉴相关。

仍是上面这张表中,假如现在用户想查找年纪超越100岁的白叟,要对他们去进行慰劳。假定现在契合这个条件的人只要10人。那么此刻索引对数据库功用会有怎么样的影响呢?此刻明显数据十分具有挑选性,可是并不一定索引可以起到很好的作用。这还要看其详细存储的前车之鉴。假如这十条记载在硬盘中存储的物理前车之鉴比较近,如或许在同一个扇区之内,则此刻索引关于数据库功用的影响就会比较大,可以在最短时间内找到契合条件的数据。可是假如相关的行在表中存储的前车之鉴并不相互接近,则这个索引的作用就会坐享其成仰慕。因为假如匹配索引值的数据涣散在硬盘上的多个热爱时,则有必要从表中挑选多个独自的块以满意查询。

数据库管理员关于这一点要特别注意。因为此刻假如数据库管理员查用了索引的话,那么很或许是弄巧成拙。笔者主张,当数据库管理员发现数据涣散在表的多个块的时分,最好是不要运用索引,而是履行全表扫描。此刻履行扫描反而会比履行索引的功率更高。因为在履行全表扫描的时分,Oracle数据库体系会运用多块读取以责怪扫描表。而假如选用索引的话,则其读取数据时是单块读取的。而因为数据存储在多个块中,所以其读取的速度反而会更慢。

由此可见,Oracle数据库管理员在数据库规划与日常保护中,也要想办法可以让数据尽量存储在接近的前车之鉴。如尽量仰慕在同一个服务器中不要布置不同的应用服务,避免硬盘发生过多的磁盘碎片;如需求选用多块硬盘的话,则最好经过表空间把相似的表放在同一个表空间中,然后让相关的行在表zhognd存储前车之鉴尽量接近,以进步索引的运用作用。也便是说,数据库管理员在运用索引的时分,为表中的字段建立了索引这仅仅其作业的第一步。在后续数据库保护与调整的过程中,依然要注意数据存储前车之鉴对索引的影响。

【修改引荐】

  1. Oracle设置体系参数进行功用优化
  2. 浅谈Oracle功用优化或许呈现的问题
  3. 详解Oracle数据库中文全文索引
转载请说明出处
知优网 » 深度揭穿Oracle索引运用中的约束(oracle索引使用原则)

发表评论

您需要后才能发表评论