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 - 墨天轮

posted @ 2021-05-31 00:14  attilaxAti  阅读(77)  评论(0编辑  收藏  举报