iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >CBO如何选择相同cost的索引
  • 525
分享到

CBO如何选择相同cost的索引

2024-04-02 19:04:59 525人浏览 泡泡鱼
摘要

ACOUG年会杨长老的演讲中,曾提到一个问题, 一条sql语句,两种执行计划的cost值相同,CBO是如何选择执行计划? 翻译一下问题,创建测试表数据, SQL> creat

ACOUG年会杨长老的演讲中,曾提到一个问题,

一条sql语句,两种执行计划的cost值相同,CBO是如何选择执行计划?


翻译一下问题,创建测试表数据,

SQL> create table z (a number, b number);
Table created.


SQL> begin 
  2    for i in 1 .. 10000 loop
  3      insert into z values(i, i);
  4    end loop;
  5    commit;
  6  end;
  7  /
PL/SQL procedure successfully completed.


SQL> create index idx_z_01 on z(a);
Index created.

SQL> create index idx_z_02 on z(b);
Index created.


SQL> exec dbms_stats.gather_table_stats('BISAL', 'Z', cascade=>true);
PL/SQL procedure successfully completed.


对于以下SQL,

select * from z where a=1 and b=1;


根据10053显示,可以看出,IDX_Z_01和IDX_Z_02这两个索引,cost相同,CBO会选择何种执行计划?

注:关于10053介绍,可以参考《 探索索引的奥秘 - 10053事件 》

Index Stats::
  Index: IDX_Z_01  Col#: 1
    LVLS: 1  #LB: 20  #DK: 10000  LB/K: 1.00  DB/K: 1.00  CLUF: 18.00
  Index: IDX_Z_02  Col#: 2
    LVLS: 1  #LB: 20  #DK: 10000  LB/K: 1.00  DB/K: 1.00  CLUF: 18.00


Access Path: index (AllEqRange)
    Index: IDX_Z_01
    resc_io: 2.00  resc_cpu: 14613
    ix_sel: 0.000100  ix_sel_with_filters: 0.000100
    Cost: 2.00  Resp: 2.00  Degree: 1
  Access Path: index (AllEqRange)
    Index: IDX_Z_02
    resc_io: 2.00  resc_cpu: 14613
    ix_sel: 0.000100  ix_sel_with_filters: 0.000100
    Cost: 2.00  Resp: 2.00  Degree: 1


杨长老提到dbsnake曾经写过,检索了下,有一篇文章介绍,

《CBO对于Cost值相同的索引的选择》

Http://www.dbsnake.net/handle-equally-costed-indexes.html


文章总结来讲,

对于oracle 10gR2及其以上的版本,CBO对于Cost值相同的索引的选择实际上会这样:

1. 如果Cost值相同的索引的叶子块数量不同,则Oracle会选择叶子块数量较少的那个索引;

2. 如果Cost值相同的索引的叶子块数量相同,则Oracle会选择索引名的字母顺序在前面的那个索引。


先验证(2)的观点,从上面10053可以看出,两个索引的cost相同,叶子块数相同,此时CBO选择的是IDX_Z_01,因为他的名字,排在IDX_Z_02前面,

Best:: AccessPath: IndexRange
  Index: IDX_Z_01
         Cost: 2.00  Degree: 1  Resp: 2.00  Card: 0.00  Bytes: 0


执行计划显示,使用索引IDX_Z_01,


除了索引名称,以及索引叶子块,本来我怀疑聚簇因子,会是另外一个影响因素,但通过设置IDX_Z_01的clsfct高于IDX_Z_02的clsfct,

exec dbms_stats.set_index_stats('BISAL','IDX_Z_01',clstfct=>21);


根据10053显示,IDX_Z_01的clsfct高于IDX_Z_02的clsfct,

Index Stats::
  Index: IDX_Z_01  Col#: 1
    LVLS: 1  #LB: 100  #DK: 10000  LB/K: 1.00  DB/K: 1.00  CLUF: 21.00
  Index: IDX_Z_02  Col#: 2
    LVLS: 1  #LB: 20  #DK: 10000  LB/K: 1.00  DB/K: 1.00  CLUF: 18.00


此时CBO选择的是IDX_Z_01,因为他的名字,排在IDX_Z_02前面,并未考虑聚簇因子的影响,

Best:: AccessPath: IndexRange
  Index: IDX_Z_01
         Cost: 2.00  Degree: 1  Resp: 2.00  Card: 0.00  Bytes: 0


总结:

对于cost相同的索引,10gR2及以上的版本,Oracle CBO还是有方法选择,索引叶子块是第一个条件,索引名称排序是第二个条件。

您可能感兴趣的文档:

--结束END--

本文标题: CBO如何选择相同cost的索引

本文链接: https://www.lsjlt.com/news/49354.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CBO如何选择相同cost的索引
    ACOUG年会杨长老的演讲中,曾提到一个问题, 一条SQL语句,两种执行计划的cost值相同,CBO是如何选择执行计划? 翻译一下问题,创建测试表数据, SQL> creat...
    99+
    2024-04-02
  • PHP与MySQL索引的不同类型及选择原则
    导言:在数据库查询优化中,索引是非常重要的一部分。它可以提高查询速度,减少数据库的负载,从而提升系统性能。在使用PHP连接MySQL数据库时,了解不同类型的索引及其选择原则,可以帮助我们更好地优化数据库的性能。一、MySQL索引的类型B-T...
    99+
    2023-10-21
    PHP (编程关键词: PHP) MySQL (编程关键词: MySQL) 索引 (编程关键词: 索引)
  • MySQL怎样选择合适的索引
    这篇文章主要介绍了MySQL怎样选择合适的索引,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先来看一个栗子EXPLAIN sele...
    99+
    2024-04-02
  • Java和Unix:如何选择最佳框架和索引?
    Java和Unix是目前IT领域中最为流行的两个技术。Java是一种面向对象的编程语言,而Unix则是一种操作系统。在实际开发中,Java常常会与Unix一同使用,为开发者们提供更加高效的开发环境。然而,在使用Java和Unix进行开发时...
    99+
    2023-06-16
    unix 框架 索引
  • python如何筛选同行相同数据
    要筛选同行相同的数据,可以使用Python中的pandas库来实现。以下是一个示例代码:pythonimport pandas as...
    99+
    2023-10-18
    python
  • mysql联合索引的选择性解析
    本篇内容介绍了“mysql联合索引的选择性解析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通过下面的实验...
    99+
    2024-04-02
  • Python Panda中索引和选择 series 的数据
    前言: pandas 中的索引意味着只需从系列中选择特定数据。索引可能意味着选择所有数据,其中一些数据来自特定列。索引也可以称为子集选择。 使用索引运算符索引系列[]:索引运算符用于...
    99+
    2024-04-02
  • 如何在Python中同步shell索引?
    在Python中,同步shell索引是一个非常常见的任务。它可以让你的代码更加高效、快速地运行,同时还可以提高代码的可读性和可维护性。在本文中,我们将介绍如何在Python中同步shell索引,以及如何使用一些常见的Python工具来帮助...
    99+
    2023-10-27
    同步 shell 索引
  • PHP中的同步索引如何实现实时搜索?
    随着互联网的发展,越来越多的网站需要实现实时搜索功能,以提高用户体验。而PHP作为一种广泛使用的编程语言,在实现实时搜索功能时也发挥了重要作用。本文将介绍PHP中的同步索引如何实现实时搜索,并提供相应的演示代码。 一、什么是同步索引? 同...
    99+
    2023-10-29
    同步 索引 实时
  • PHP与MySQL索引的选择与优化策略
    引言:在开发Web应用程序时,PHP与MySQL是两个重要的技术组合。而索引作为MySQL中重要的特性,对于提高数据库的查询性能至关重要。本文将介绍PHP与MySQL中索引的选择和优化策略,并提供一些具体的代码示例。一、索引的基本原理与分类...
    99+
    2023-10-21
    MySQL PHP 索引优化
  • 如何在 PHP 索引、Django 和 JavaScript 之间做出最佳选择?
    在如今的软件开发领域,PHP、Django和JavaScript是最受欢迎的编程语言之一。这三种编程语言各有优缺点,因此在选择使用它们时需要仔细考虑。在本文中,我们将探讨如何在PHP索引、Django和JavaScript之间做出最佳选择。...
    99+
    2023-08-04
    索引 django javascript
  • 文件索引的新选择:使用 PHP 和 NumPy ?
    随着互联网信息的不断增长,文件管理变得越来越重要。而文件索引作为文件管理的基础,也随着时间的推移不断演变。近期,有人提出了一种新选择:使用 PHP 和 NumPy 来进行文件索引,相信这种方法会受到许多人的关注和喜爱。 首先,让我们来了解一...
    99+
    2023-09-11
    numpy 文件 索引
  • CMS与搜索引擎的相辅相成:如何让您的网站更具吸引力
    内容管理系统 (CMS) 是一个软件应用程序,可让您轻松创建、管理和修改网站的内容。CMS 使您可以创建和编辑页面、帖子、图像和视频,而无需任何编码知识。这使得 CMS 成为企业和个人的理想选择,他们希望轻松地管理其网站的内容。 CMS...
    99+
    2024-02-02
    内容管理系统 搜索引擎 网站排名 网站优化
  • Swoole和Workerman对PHP与MySQL的索引统计和索引选择的优化方法
    引言:在Web开发过程中,数据库是必备的组件之一。而索引是对数据库中数据进行快速查找的关键因素之一。索引的选择和优化可以极大地提高数据库的查询性能。在本文中,我们将介绍如何使用Swoole和Workerman对PHP与MySQL的索引进行统...
    99+
    2023-10-21
    swoole 索引优化 Workerman
  • PHP如何实现同步文件索引?
    在现代的计算机应用中,文件管理是一个非常重要的任务。而在文件管理中,索引是一种非常重要的机制,它可以帮助我们快速地找到所需要的文件。在本文中,我们将会介绍如何使用PHP实现同步文件索引的功能。 索引的基本概念 在计算机中,索引就是一种...
    99+
    2023-07-09
    同步 文件 索引
  • Java 和 Bash:构建实时索引的最佳选择?
    实时索引是搜索引擎中的一个关键组成部分,因为它们允许搜索引擎在用户进行搜索时快速检索和返回结果。在构建实时索引时,选择正确的工具非常重要,因为这将直接影响索引的效率和搜索的速度。在本文中,我们将比较 Java 和 Bash 两种语言,以确...
    99+
    2023-08-26
    bash 索引 实时
  • 索引同步在Java中是如何实现的?
    随着互联网的不断发展,搜索引擎已经成为人们获取信息的主要渠道之一。而搜索引擎的核心技术就是索引,通过索引可以快速地找到所需的信息。然而,由于数据的不断更新和扩充,索引的同步也变得越来越重要。本文将介绍在Java中实现索引同步的方法。 一、...
    99+
    2023-10-11
    shell 索引 同步
  • synchronized 和 Lock 的异同点(如何让选择)
    目录相同点不同点如何选择前言: 我们主要学习 synchronized 和 Lock 的异同点,以及该如何选择。 相同点 synchronized 和 Lock 的相同点非常多,我们...
    99+
    2024-04-02
  • MongoDB 中索引选择B-树的原因是什么
    这期内容当中小编将会给大家带来有关MongoDB 中索引选择B-树的原因是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、B-树和B+树的区别很明显,我们要想弄清楚...
    99+
    2024-04-02
  • MySQL数据库引擎如何选择
    MySQL数据库引擎如何选择,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  如何选择MySQL数据库引擎  MySQL的自带引擎肯定是够...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作