zoukankan      html  css  js  c++  java
  • Atitit 为什么oracle这类大型数据库比mysql的性能机制目录1. 分区机制差别 11.1. Join算

    Atitit 为什么oracle这类大型数据库比mysql的性能机制

     

    目录

    1. 分区机制差别

    1.1. Join算法

    1.2. Sql语句性能与trigger

    2. Io机制

    2.1. 表与索引空间相互分离

    2.2. 堆表与索引组织表的的对比

    3. Cache

    3.1. 物化视图oracle支持

    3.2. Query cache

    4. 多核支持

    4.1. Oracle进程模式与mysql线程模式的对比

    4.2. 多核支持oracle更好

    4.3. 多核并行查询一条sql oracle支持,mysql不支持

    5. 索引机制

    5.1. Hash索引 mysql仅仅支持mem存储引擎加hash索引

    5.2. 降序索引反向索引

    5.3. 索引聚簇表

    5.4. 函数索引

    6. 同硬件情况与mysql性能对比

    6.1. 结论

    6.2. 补充

    7. Ref

     

    1. 分区机制差别

     

    Full outer join

    不支持

    支持

    MySQL可以用RIGHTJOIN 和LEFT JOIN合并来做。Oracle 原生支持

    递归查询

    不支持

    支持

    MySQL不支持递归查询。

    Except(除

    不支持

    支持

    MySQL不支持

    Intersect(交集)

    不支持

    支持

    MySQL不支持

    并发查询

    不支持

    支持

    MySQLinfobright引擎支持

    分区全局索引

    不支持

    支持

    合并各个不同的索引树

    分区本地索引

    不支持

    支持

    每个区单独的索引树

     

      1. Join算法

     

    ForceIndex/Use Index

    支持

    支持

    Oracle hints

     

     

    join算法

    hash join

    不支持

    支持

    MySQL只有普通的嵌套循环算法

    merge join

    不支持

    支持

     

      1. Sql语句性能与trigger

    触发器

    DDL触发器

    不支持

    完美支持

    MySQL不支持DDL触发器。Oracle支持基于DDL的触发器。

    行触发器

    支持

    支持

    MySQL不能在触发器里面取消对表的更改。Oracle可以在触发器里面取消对表的更改操作

    语句触发器

    不支持

    支持

    MySQL不支持。Oracle支持基于基于语句的触发器

    触发器合并

    不支持

    支持

    Oracle支持多个触发器合并。

     

     

    1. Io机制
      1. 表与索引空间相互分离

     

    表空间

    数据库空间

    不支持

    支持

    MySQL只有针对表的表空间,没有针对数据库的表空间。Oracle 有单独的数据库空间。

    索引空间

    不支持

    支持

    MySQL的数据以及索引都是放在单独的文件里面。Oracle 有针对专门针对索引的空间。

    临时表空间

    支持

    支持

    MySQL5.7 支持临时表空间

      1. 堆表与索引组织表的的对比

     

    Oracle支持堆表,也支持索引组织表
    PostgreSQL只支持堆表,不支持索引组织表
    Innodb只支持索引组织表

     

     

    1. Cache
      1. 物化视图oracle支持

     

      1. Query cache
    1. 多核支持
      1. Oracle进程模式与mysql线程模式的对比


    PostgreSQL和oracle是进程模式,MySQL是线程模式。
    进程模式对多CPU利用率比较高。
    进程模式共享数据需要用到共享内存,而线程模式数据本身就是在进程空间内都是共享的,不同线程访问只需要控制好线程之间的同步。
    线程模式对资源消耗比较少。
    所以MySQL能支持远比oracle多的更多的连接。

     

      1. 多核支持oracle更好
      2. 多核并行查询一条sql oracle支持,mysql不支持

     

    1. 索引机制
      1. Hash索引 mysql仅仅支持mem存储引擎加hash索引

    大数据量下bree要查询三四层,三四次io。。

    Hash只需要一次

      1. 降序索引反向索引
      2. 索引聚簇表

     

    索引聚簇表

    不支持

    支持

    Oracle可以把不同的表不同列聚簇。

     

      1. 函数索引

    函数索引

    支持

    支持

    MySQL5.7 支持

    条件索引

    不支持

    支持

    Where条件过滤的索引

    位图索引

    不支持

    支持

    MySQL不支持

    反向索引

    支持

    支持

    MySQL5.7可以用虚拟列来实现

     

    1. 同硬件情况与mysql性能对比

     

      1. 结论

     

    场景

    插入速度(条/s)

    数据容量

    1000万总耗时(分)

    Oracle+固态硬盘+未做优化

    12000

    8.3G

    13.9

    Oracle+机械硬盘+未做优化

    10000

    8.3G

    16.7

    Mysql+机械硬盘+Commit=0

    3900

    7.1G

    42.7

    Mysql+机械硬盘+Commit=1

    3500

    7.1G

    47.6

    PostgreSQL+机械硬盘+未做优化

    10300

    7.5G

    16.3

      1. 补充

    对Mysql的doublewrite关闭后进行了性能测试,并没有对数据有多大影响;

    1. Ref

    Atitit 数据库对比较 oracle  mysql pgsql

     

    数据库对比 | MySQL vs Oracle - 墨天轮

  • 相关阅读:
    p_value
    p_value
    第一次差异分析
    fdr
    rpkm&map
    rpkm&map
    s
    python数据处理小函数集合
    Jupyter Notebook 的快捷键
    自由度degree of freedom
  • 原文地址:https://www.cnblogs.com/attilax/p/15196823.html
Copyright © 2011-2022 走看看