Atitit 为什么oracle这类大型数据库比mysql的性能机制
目录
4.3. 多核并行查询一条sql oracle支持,mysql不支持
5.1. Hash索引 mysql仅仅支持mem存储引擎加hash索引
Full outer join | 不支持 | 支持 | MySQL可以用RIGHTJOIN 和LEFT JOIN合并来做。Oracle 原生支持 |
递归查询 | 不支持 | 支持 | MySQL不支持递归查询。 |
Except(除 | 不支持 | 支持 | MySQL不支持 |
Intersect(交集) | 不支持 | 支持 | MySQL不支持 |
并发查询 | 不支持 | 支持 | MySQLinfobright引擎支持 |
分区全局索引 | 不支持 | 支持 | 合并各个不同的索引树 |
分区本地索引 | 不支持 | 支持 | 每个区单独的索引树 |
ForceIndex/Use Index
支持
支持
Oracle hints
join算法
hash join
不支持
支持
MySQL只有普通的嵌套循环算法
merge join
不支持
支持
触发器
DDL触发器
不支持
完美支持
MySQL不支持DDL触发器。Oracle支持基于DDL的触发器。
行触发器
支持
支持
MySQL不能在触发器里面取消对表的更改。Oracle可以在触发器里面取消对表的更改操作
语句触发器
不支持
支持
MySQL不支持。Oracle支持基于基于语句的触发器
触发器合并
不支持
支持
Oracle支持多个触发器合并。
表空间
数据库空间
不支持
支持
MySQL只有针对表的表空间,没有针对数据库的表空间。Oracle 有单独的数据库空间。
索引空间
不支持
支持
MySQL的数据以及索引都是放在单独的文件里面。Oracle 有针对专门针对索引的空间。
临时表空间
支持
支持
MySQL5.7 支持临时表空间
Oracle支持堆表,也支持索引组织表
PostgreSQL只支持堆表,不支持索引组织表
Innodb只支持索引组织表
- 多核支持
- Oracle进程模式与mysql线程模式的对比
PostgreSQL和oracle是进程模式,MySQL是线程模式。
进程模式对多CPU利用率比较高。
进程模式共享数据需要用到共享内存,而线程模式数据本身就是在进程空间内都是共享的,不同线程访问只需要控制好线程之间的同步。
线程模式对资源消耗比较少。
所以MySQL能支持远比oracle多的更多的连接。
大数据量下bree要查询三四层,三四次io。。
Hash只需要一次
-
- 降序索引反向索引
- 索引聚簇表
索引聚簇表 | 不支持 | 支持 | Oracle可以把不同的表不同列聚簇。 |
函数索引 | 支持 | 支持 | MySQL5.7 支持 |
条件索引 | 不支持 | 支持 | Where条件过滤的索引 |
位图索引 | 不支持 | 支持 | MySQL不支持 |
反向索引 | 支持 | 支持 | MySQL5.7可以用虚拟列来实现 |
| |||
场景 | 插入速度(条/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 |
对Mysql的doublewrite关闭后进行了性能测试,并没有对数据有多大影响;
Atitit 数据库对比较 oracle mysql pgsql
数据库对比 | MySQL vs Oracle - 墨天轮