数据库的堆表与索引组织表的数据存储格式讨论

标签: MySQL基础知识 堆表 索引组织表 存储格式 | 发表时间:2012-12-10 04:14 | 作者:OurMySQL
出处:http://ourmysql.com

汪洋@tiptop(967409) 2012/8/29 21:48:48

存储引擎为mysql数据库快速小巧这一特点做的,就是你按有序主键去查找,不要更新主键

汪洋@tiptop(967409) 2012/8/29 21:49:57

二级索引的更新,需要overflow segment的问题在rdbms都避免不了吧

文科@EC(101800844) 2012/8/29 22:03:13

不知道分形索引是如何实现的

汪洋@tiptop(967409) 2012/8/29 22:05:31
oracle 数据库实现关系型数据库rdbms的来说:大 全 精

mysql数据库实现rdbms的来说: 小 轻 快

文科@EC(101800844)  20:09:17

大家怎么看 SELECT xxx FROM TABLE1 WHERE id IN(xxx, yyy, zzz…)  , IN 里面有数千个值的查询?

毛剑@金山<[email protected]> 2012/8/29 22:11:50

1、IOT因为是有序的,所以对IOT的频繁无序的插入操作会导致索引块的分裂,这会严重影响插入操作的性能;而堆表不存在这个问题;

2、IOT因为是有序的,所以在批量导入大量无序数据方面,IOT的速度要比堆表差很多;

3、IOT因为是有序的,所以对IOT表主键的更新涉及到可能要移动数据到另外一个块,堆表一般不存在这个问题;

4、IOT因为是有序的,所以随着数据的插入和索引块的分裂,每条记录所在的物理存储位置可能会发生变化,这样如何维护在IOT上建立的二级索引的效率就是个问题,Oracle是通过physical guess来解决的,InnoDB存储引擎是如何做的?

5、即便是对IOT中非主键的更新,也可能会导致更新后的数据要挪到overflow segment,这样实际上是发生了row chain,这会影响查询IOT中数据的速度(很显然是因为查询所需要的IO次数的增加)。

在Oracle数据库中,IOT一般适合于那些不怎么频繁更新且又需要快速按主键访问的数据库表。

1、如果表大量顺序扫描 ,heap table 就大哭了。。。,尤其经常UPDATE 主键 ,ORDER BY 之类;

2、batch insert 的时候可以优先考虑对插入结果集进行排序;

3、大量无序插入 可以 使用id 自增seq uuid 等方式顺序插入,

  那堆表鸡肋的顺序扫描依然暴露无遗;

4、你见过谁 没事 更新主键的吗?

5、 可耻的 先插入一条记录,然后另外的表大量占用PAGE 再插入一条,,堆表的  index scan 即可 大量随机IO 读heap 劣势其实很大…;哥们怎么想的。。。

毛剑@金山<[email protected]> 2012/8/29 22:24:54

HEAP 要依赖IAM 和PFS来 定位写入,很多问题的,经典的就是被我这样折腾过,写满第一页,再大量插入另外一个表,然后刚才哪个表的下一页就悲剧了…

相关文章

标签: , , ,

相关 [数据库 索引 组织] 推荐:

数据库的堆表与索引组织表的数据存储格式讨论

- - OurMySQL
汪洋@tiptop(967409) 2012/8/29 21:48:48. InnoDB 存储引擎为mysql数据库快速小巧这一特点做的,就是你按有序主键去查找,不要更新主键. 汪洋@tiptop(967409) 2012/8/29 21:49:57. 二级索引的更新,需要overflow segment的问题在rdbms都避免不了吧.

数据库索引

- - CSDN博客推荐文章
索引是由用户创建的、能够被修改和删除的、实际存储于数据库中的物理存在;创建索引的目的是使用户能够从整体内容直接查找到某个特定部分的内容. 一般来说,索引能够提高查询,但是会增加额外的空间消耗,并且降低删除、插入和修改速度. 1.聚集索引:表数据按照索引的顺序来存储的. 2.非聚集索引:表数据存储顺序与索引顺序无关.

数据库索引总结

- - CSDN博客数据库推荐文章
一、为什么要创建索引呢(优点). 这是因为,创建索引可以大大提高系统的性能. 第一,   通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,   可以大大加快数据的检索速度,这也是创建索引的最主要的原因. 第三,   可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义.

数据库索引的使用

- - CSDN博客数据库推荐文章
使用索引有很多优点,例如可以大大提高数据库的检索速度,改善数据库性能;. 可以在查询的过程中使用优化隐藏器,提高系统的性能等. 但是增加索引也会存在着缺陷,例如:. 1.创建索引和维护索引要耗费时间;. 2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间;. 3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度.

理解MySQL数据库覆盖索引

- - haohtml's blog
看AUTO_INCREMENT就知道数据并不多,75万条. 很简单对不对?怪异的地方在于:. 如果换成MyISAM做存储引擎的时候,查询耗时只需要0.01s,用InnoDB却会是0.15s左右. 如果只是就这么点差距其实不是什么大不了的事,但是真实的业务需求比这个复杂,造成的差距也很大:MyISAM只需要0.12s,InnoDB则需要2.2s.,最终定位到问题症结是在这条SQL.

数据库索引的实现原理

- - 孟飞阳的博客
说白了,索引问题就是一个查找问题. 二、数据库索引介绍及特点说明. 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据. 索引的实现通常使用B树及其变种B+树. 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法.

数据库查询性能优化之利器—索引(一)

- - 博客园_首页
                   数据库查询性能优化之利器—索引(一).   最近在做基于Android的公交查询系统的过程中,遇到一个很棘手的问题:换乘算法效率低. 在直达查询和一次换乘查询的时候,问题体现的还不是很明显,能够在1s之内查询出乘车方案,而当进行二次查询的时候,基本要等一两分钟才能查询出换乘方案,这对于公交查询系统是绝对无法容忍的.

Mysql数据库索引查询优化的分享

- - 膘叔
这是昨天SAE分享的一篇文章,开始的时候,我看了一遍,发现好象没有什么特别的内容,但再仔细看的时候,发现居然可以这样做.       我们要访问的表是一个非常大的表,四千万条记录,id是主键,program_id上建了索引.       执行一条SQL:.       这条SQL非常慢. 我们原以为处理记录太多的原因,所以加了id限制,一次只读五十万条记录.

数据库优化-删除不再使用的索引

- - CSDN博客数据库推荐文章
一个运行了四年的库,近期发现一些头疼的问题,空间不足,性能降低. 发现有些索引因为应用变更,基本不用了,决定检测,删除那些不同的索引;. 以前也有写过博文: http://blog.csdn.net/jacson_bai/article/details/37773319. 这里涉及到公司一些安全,就不贴出来了,主要说一下解决思路.

数据库索引的作用和优点缺点

- - 数据库 - ITeye博客
这是因为,创建索引可以大大提高系统的性能. 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因. 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义. 第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间.