搜索
首页数据库mysql教程 用示例说明索引数据块中出现热块&Latch的场景,并给出解决方案

引言:索引的热块其实和数据块的热块发生的原理大相径庭,也都是因为大量会话一起访问同一个索引块造成的,我们的解决方案有反向索引,分区索引等。我们说任何一

引言:索引的热块其实和数据块的热块发生的原理大相径庭,也都是因为大量会话一起访问同一个索引块造成的,我们的解决方案有反向索引,分区索引等。我们说任何一种方式都不是完美的,有优点就必然有缺点,我们把包含索引键值的索引块从顺序排列打散到无序排列,香港空间,降低了latch争用,同时也增加了oracle扫描块的数量。我们在实际使用时多测试取长补短,以提高系统的整体性能为目标。


 

LEO1@LEO1>create table leo1 (id  number , name  varchar2(200));     创建了一个leo1表

Table created.

LEO1@LEO1>insert into leo1 (id,name) select object_id,object_name from dba_objects; 将dba_objects前2个字段复制到leo1表中。

71966 rowscreated.

LEO1@LEO1>select id,name from leo1 where rownum

        ID NAME

----------------------------------------------------

       673 CDC_CHANGE_SOURCES$

       674 I_CDC_CHANGE_SOURCES$

       675 CDC_CHANGE_SETS$

       676 I_CDC_CHANGE_SETS$

       677 CDC_CHANGE_TABLES$

       678 I_CDC_CHANGE_TABLES$

       679 CDC_SUBSCRIBERS$

       680 I_CDC_SUBSCRIBERS$

       681 CDC_SUBSCRIBED_TABLES$

LEO1@LEO1>create index leo1_index on leo1(id);     在leo1表上id列创建一个索引

Index created.

LEO1@LEO1>execute dbms_stats.gather_table_stats('LEO1','LEO1',cascade=>true);  对表和索引一起做一个分析,香港空间,cascade=>true 指的是级联表上的索引一起做分析

PL/SQL proceduresuccessfully completed.

LEO1@LEO1>create table leo2 (id number,name varchar2(200));      创建leo2表

Table created.

LEO1@LEO1>insert into leo2 (id,name) select object_id,object_name from dba_objects;  插入71968行

71968 rowscreated.

为什么比leo1表多了2行呢,就是多了leo1和leo1_index这2个对象,我们刚刚建的。

LEO1@LEO1>create index leo2_index on leo2(id) reverse;        创建一个反向索引

Index created.

LEO1@LEO1>execute dbms_stats.gather_table_stats('LEO1','LEO2',cascade=>true);  做分析

PL/SQL proceduresuccessfully completed.

LEO1@LEO1>select index_name,index_type,table_name,status from dba_indexes wheretable_name in ('LEO1','LEO2');

INDEX_NAME   INDEX_TYPE      TABLE_NAME      STATUS

--------------------------------------------------------- ------------------------------ --------

LEO1_INDEX    NORMAL                LEO1           VALID

LEO2_INDEX    NORMAL/REV       LEO2           VALID  

LEO2_INDEX   是反向索引,我们使用它来把顺序的索引块反向成无序索引块存储,这样我们在查询一个区间范围时,索引键值就会落在不连续的索引块上,防止热块的产生,降低“latch 链表”争用。这可能算是反向索引唯一被使用的情况。因为反向索引不支持index range scan功能,只支持index full scan 全索引扫描,如何理解呢,虚拟主机,举个简单的例子 反向索引 不能帮你检索出  id> 1 and id

LEO1@LEO1> set   autotrace  on;       启动执行计划

LEO1@LEO1>select count(*)  from leo1 whereid

  COUNT(*)

----------

        98

Execution Plan

----------------------------------------------------------

Plan hash value:423232053

--------------------------------------------------------------------------------

| Id  | Operation         | Name       | Rows | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |           |     1 |     5 |    2   (0)| 00:00:01 |

|   1 | SORT AGGREGATE   |           |     1|     5 |            |          |

|*  2 |   INDEX RANGE SCAN| LEO1_INDEX |    96 |  480 |     2   (0)| 00:00:01 |

--------------------------------------------------------------------------------

索引范围扫描,因为我们查询索引键值都是存放在连续的索引块中,所以只有仅仅的2个一致性读,它只扫描符合条件的索引块就能找到相应的记录。

PredicateInformation (identified by operation id):

---------------------------------------------------

   2 - access("ID"

Statistics

----------------------------------------------------------

          0 recursive calls

          0 db block gets

          2  consistent gets

          0 physical reads

          0 redo size

        526 bytes sent via SQL*Net to client

        523 bytes received via SQL*Net from client

          2 SQL*Net roundtrips to/from client

          0 sorts (memory)

          0 sorts (disk)

          1 rows processed

LEO1@LEO1>select count(*)  from leo2 whereid

  COUNT(*)

----------

        98

Execution Plan

----------------------------------------------------------

Plan hash value:1710468575

------------------------------------------------------------------------------------

| Id  | Operation             | Name       | Rows | Bytes | Cost (%CPU)| Time     |

------------------------------------------------------------------------------------

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
MySQL:初学者的基本技能MySQL:初学者的基本技能Apr 18, 2025 am 12:24 AM

MySQL适合初学者学习数据库技能。1.安装MySQL服务器和客户端工具。2.理解基本SQL查询,如SELECT。3.掌握数据操作:创建表、插入、更新、删除数据。4.学习高级技巧:子查询和窗口函数。5.调试和优化:检查语法、使用索引、避免SELECT*,并使用LIMIT。

MySQL:结构化数据和关系数据库MySQL:结构化数据和关系数据库Apr 18, 2025 am 12:22 AM

MySQL通过表结构和SQL查询高效管理结构化数据,并通过外键实现表间关系。1.创建表时定义数据格式和类型。2.使用外键建立表间关系。3.通过索引和查询优化提高性能。4.定期备份和监控数据库确保数据安全和性能优化。

MySQL:解释的关键功能和功能MySQL:解释的关键功能和功能Apr 18, 2025 am 12:17 AM

MySQL是一个开源的关系型数据库管理系统,广泛应用于Web开发。它的关键特性包括:1.支持多种存储引擎,如InnoDB和MyISAM,适用于不同场景;2.提供主从复制功能,利于负载均衡和数据备份;3.通过查询优化和索引使用提高查询效率。

SQL的目的:与MySQL数据库进行交互SQL的目的:与MySQL数据库进行交互Apr 18, 2025 am 12:12 AM

SQL用于与MySQL数据库交互,实现数据的增、删、改、查及数据库设计。1)SQL通过SELECT、INSERT、UPDATE、DELETE语句进行数据操作;2)使用CREATE、ALTER、DROP语句进行数据库设计和管理;3)复杂查询和数据分析通过SQL实现,提升业务决策效率。

初学者的MySQL:开始数据库管理初学者的MySQL:开始数据库管理Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括创建数据库、表格,及使用SQL进行数据的CRUD操作。1.创建数据库:CREATEDATABASEmy_first_db;2.创建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入数据:INSERTINTObooks(title,author,published_year)VA

MySQL的角色:Web应用程序中的数据库MySQL的角色:Web应用程序中的数据库Apr 17, 2025 am 12:23 AM

MySQL在Web应用中的主要作用是存储和管理数据。1.MySQL高效处理用户信息、产品目录和交易记录等数据。2.通过SQL查询,开发者能从数据库提取信息生成动态内容。3.MySQL基于客户端-服务器模型工作,确保查询速度可接受。

mysql:构建您的第一个数据库mysql:构建您的第一个数据库Apr 17, 2025 am 12:22 AM

构建MySQL数据库的步骤包括:1.创建数据库和表,2.插入数据,3.进行查询。首先,使用CREATEDATABASE和CREATETABLE语句创建数据库和表,然后用INSERTINTO语句插入数据,最后用SELECT语句查询数据。

MySQL:一种对数据存储的初学者友好方法MySQL:一种对数据存储的初学者友好方法Apr 17, 2025 am 12:21 AM

MySQL适合初学者,因为它易用且功能强大。1.MySQL是关系型数据库,使用SQL进行CRUD操作。2.安装简单,需配置root用户密码。3.使用INSERT、UPDATE、DELETE、SELECT进行数据操作。4.复杂查询可使用ORDERBY、WHERE和JOIN。5.调试需检查语法,使用EXPLAIN分析查询。6.优化建议包括使用索引、选择合适数据类型和良好编程习惯。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具