开发者社区> 问答> 正文

OceanBase数据库默认创建的表既不是索引组织表也不是堆表去更新全表的某两个列这种是不是会很慢?

OceanBase数据库我想请问OB里面默认创建的表既不是索引组织表也不是堆表,那如果一张表既没有主键也没有索引且数据量很大的情况下,去更新全表的某两个列,这种是不是就会很慢?这边测试了一个数据,同样的表,同样的update语句,执行计划也都是全表扫描然后update,但是ob跑了700多秒,Oracle跑了70多秒,ob的执行计划也是70多秒,但是实际跑出来就是700多,但是为什么执行计划很单一就两行?

展开
收起
闲o月 2024-03-02 19:36:16 101 0
来自:OceanBase
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在OceanBase数据库中,如果一张表既没有主键也没有索引,且数据量很大,更新全表的某两个列确实可能会比较慢。这主要是因为没有索引的情况下,数据库需要执行全表扫描来定位需要更新的数据行,这在大数据量的情况下效率较低。

    以下是一些可能的原因和建议:

    1. 执行计划与实际运行时间差异:执行计划显示的时间可能只是估计的成本,并不总是准确反映实际的运行时间。实际运行时间可能受到多种因素的影响,包括服务器的负载、资源争用、网络延迟等。
    2. 全表扫描的效率:在没有索引的情况下,全表扫描需要检查表中的每一行,这会导致大量的I/O操作,从而降低更新操作的效率。
    3. 数据合并策略:OceanBase数据库是基于LSM-Tree(Log-Structured Merge-Tree)的存储引擎,它通过合并操作来优化写性能。如果业务场景暂时无法创建索引,或者执行的SQL多为范围扫描,可以考虑手动触发合并,以清理删除或更新的数据版本,降低全表扫描的数据量,提升速度。
    4. 硬件资源:确保服务器的硬件资源足够支持大规模的数据处理,包括足够的CPU计算能力、内存容量以及快速的磁盘I/O性能。
    5. 并发控制:考虑是否存在并发事务或锁竞争的情况,这些都可能影响更新操作的性能。
    6. Oracle与OceanBase的差异:不同数据库系统的内部实现和优化策略不同,可能导致相同操作的性能表现有差异。Oracle数据库可能有更高效的全表扫描和更新机制。
    7. 执行计划的简化:执行计划只显示了关键的操作步骤,可能没有包含所有细节,因此看起来只有两行。实际上,执行过程中可能涉及更多的内部操作。

    总的来说,为了提高更新操作的性能,可以考虑创建合适的索引来避免全表扫描,或者根据业务需求调整合并策略。同时,监控硬件资源的使用情况,并优化数据库的配置参数,也有助于提升性能。如果性能问题持续存在,建议联系OceanBase的技术支持团队进行深入分析和优化。

    2024-03-02 20:38:31
    赞同 1 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,据我所知在阿里云OceanBase数据库中,如果一张表既没有主键也没有索引,且数据量很大,执行全表更新操作可能会较慢,这是因为全表更新需要遍历整张表的每一行数据进行修改,在没有索引的情况下,数据库需要逐行扫描整个表来找到需要更新的数据,因此耗时较长。

    还有就是你提到的相同的表和相同的update语句,执行计划一致,但实际执行时间差异较大的问题,可能是系统负载导致的,如果阿里云OceanBase数据库的系统负载较高,即有其他任务或查询正在执行,在资源竞争的情况下,更新操作会受到影响,执行时间较长。

    以及数据结构和引擎差异,阿里云OceanBase数据库和Oracle数据库在底层数据结构和查询优化引擎上存在差异,可能会导致执行计划的表现不同,从而影响实际执行时间。

    2024-03-02 20:17:52
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
蚂蚁OceanBase数据库团队,用于OceanBase技术原理、运维经验和案例分享、对外交流。
问答排行榜
最热
最新

相关电子书

更多
阿里云数据库运维实战手册 立即下载
传统数据库上云最佳实践-友邦保险 立即下载
数据库游戏行业最佳实践 立即下载