推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

浅谈Oracle索引提高效率

   2023-07-02 网络整理佚名2200
核心提示:索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容,能够有效帮助数据库提高效率,索引提高效率已经广泛应用到了数据库中。),优化器会检查SQL语句中的每个表的物理大小,索引的状态,然后选用花费最低的执行路径。本站的教程中,对索引的各种运用都给出了具体的案例,结合案例让我们使用起来能够更容易理解索引的使用。

数据库系统是目前国际上流行的关系数据库管理系统。 该系统移植性好,使用方便,功能强大,适用于各种大、中、小型计算机环境。 在关系数据库中,索引是一种独立的物理存储结构,用于对数据库表中一个或多个列的值进行排序。 指向数据页的逻辑指针列表,这些值在其中进行物理标识。 索引的作用相当于书籍的目录。 您可以根据目录中的页码快速找到所需的内容,可以有效帮助数据库提高效率。 索引的效率在数据库中得到了广泛的应用。

1、特点和优点: 提高效率 主键唯一性验证成本: 需要空间存储来定期维护和重建索引:

LTER INDEX  REBUILD 

2.索引的访问方式有两种

索引扫描(Index Scan)

索引范围扫描

3、基本表的选择

基表(Table)是指最先访问的表(通常通过全表扫描访问)。 根据优化器的不同,SQL语句中底层表的选择也不同。

如果使用CBO(COST baseD),优化器会检查SQL语句中每个表的物理大小、索引的状态,然后选择成本最低的执行路径。

如果使用 RBO (RULE baseD ),并且所有连接条件都有对应的索引,在这种情况下,基表是 FROM 子句中列出的最后一个表。

4. 多个相等索引

当SQL语句的执行路径可以使用分布在多个表上的多个索引时,会同时使用多个索引,并在运行时合并它们的记录,以仅检索对所有索引有效的记录。

在选择执行路径时,唯一索引的排名高于非唯一索引。 但是,此规则仅在将索引列与 WHERE 子句中的常量进行比较时才有效。 如果索引列与其他表的索引类进行比较。 此类子句在优化器中的排名非常低。

如果要引用不同表上的两个相同级别的索引,则 FROM 子句中表的顺序将决定先使用哪个索引。 FROM 子句中最后一个表的索引将具有最高优先级。

如果要引用同一个表上的两个相同级别的索引,则 WHERE 子句中最先引用的索引将具有最高优先级。

5. 相等比较优先于范围比较。 有非唯一索引,也有非唯一索引。

SELECT ENAME FROM EMPWHERE DEPTNO > 20AND EMP_CAT = 'A'

这里只使用索引,然后将所有记录与条件一一进行比较。 执行路径如下:

TABLE ACCESS BY ROWID ON EMPINDEX RANGE SCAN ON CAT_IDX

即使是唯一索引,如果做范围比较,其优先级也低于非唯一索引的相等比较。

6.索引级别不明确当无法判断索引的级别差异时,优化器将只使用一个索引,该索引在WHERE子句中列在第一位。 上有一个非唯一索引, 上有一个非唯一索引。

SELECT ENAME FROM EMPWHERE DEPTNO > 20AND EMP_CAT > 'A'

这里,仅使用索引。 执行路径如下:

EMP 上的 ROWID 表

索引范围扫描开启

7、强制索引失败 如果两个或多个索引具有相同的级别,可以强制优化器使用其中之一(通过它,检索到的记录数很少)。

SELECT ENAMEFROM EMPWHERE EMPNO = 7935AND DEPTNO + 0 = 10    AND EMP_TYPE || '' = 'A'  

8. 如果索引列是函数的一部分,请避免在索引列上使用计算的 WHERE 子句。 优化器不会使用索引,而是使用全表扫描。

SELECT * FROM DEPTWHERE SAL * 12 > 25000;
SELECT * FROM DEPTWHERE SAL > 25000/12;

9、自动选择索引 如果表中有两个以上(含两个)索引,则其中一个为唯一索引,其他为非唯一索引。 在这种情况下,将使用唯一索引,并且完全忽略非唯一索​​引。

SELECT ENAME FROM EMP WHERE EMPNO = 2326AND DEPTNO = 20;

这里,只有 EMPNO 上的索引是唯一的,因此 EMPNO 索引将用于检索记录。

SELECT ENAME FROM EMP WHERE EMPNO = 2326AND DEPTNO = 20;

10. 避免在索引列上使用 NOT 通常,我们希望避免在索引列上使用 NOT,NOT 会产生与在索引列上使用函数相同的影响。 当遇到 NOT 时,它会停止使用索引并执行全表扫描。

SELECT * FROM DEPTWHERE NOT DEPT_CODE = 0
SELECT * FROM DEPTWHERE DEPT_CODE > 0

当我们学习如何使用索引来提高数据库的效率时,有很多细节需要注意,以避免不必要的工作量。 在本站的教程中,针对索引的各种应用给出了具体案例。 结合案例让我们更容易理解索引的使用。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON