【发布时间】:2016-08-27 04:05:46
【问题描述】:
我对 oracle 11gR2 和 Mysql 5.6 进行了一点比较。
我在两个 DBMS 中使用 3 个表创建相同的架构 - 分支 - 客户 - 贷款 贷款有一个外键给客户,一个客户有一个外键给分行,而且它们都有主键。
我创建了分支机构和客户(200_000 个客户),我想用大约 50 列组成的贷款表测试插入性能。
大多数 clolumns 是 double 或 integer 或 string。
create or replace PROCEDURE create_loans( n number)
as
BEGIN
Declare
i number:=0;
randDouble float ;
randInt number;
randString varchar2(50);
Begin
while i < n
Loop
randDouble := ROUND(dbms_random.value(0,1),17);
randInt := ROUND(dbms_random.value(1,100000000));
randString := dbms_random.string('l', 50);
Insert into loan_row_model.loan values(null,
randDouble,
randDouble*10,
randDouble*13,
SUBSTR(randString,1,32),
SUBSTR(randString,2,10),
randDouble*155,
SUBSTR(randString,1,9),
SUBSTR(randString,9,10),
SUBSTR(randString,1,32),
randDouble*6123,--annual_inc
SUBSTR(randString,3,32),--verification_status
SUBSTR(randString,4,30),
randDouble,
randInt,--open_acc
randInt*2,
SUBSTR(randString,7,7),
randInt*5,--total_acc
SUBSTR(randString,1,3),--initial_list_status
randDouble*64,
randDouble*4,
randDouble*231,
randDouble,
randDouble,
randDouble*12,
randDouble,--collection_recovery_fee
SUBSTR(randString,19,30),
randDouble*14,--last_pymnt_amnt
SUBSTR(randString,21,32),
SUBSTR(randString,9,30),
SUBSTR(randString,16,15),--policy_code
SUBSTR(randString,1,29),--application_type
randInt,
randInt*7,
randInt*4,
randInt,
randInt,
randInt,
randInt*3,
randInt,--mths_since_rcnt_il
randDouble*6149,
randInt*8,--open_rv_12m
randInt*8,--open_rv_24m
randDouble*475,
randDouble*37,--all_util
randInt*4,
randInt,
randInt*3,
randInt,
randInt*9,
TO_DATE( TRUNC( DBMS_RANDOM.VALUE(TO_CHAR(DATE '2016-01-01','J'),TO_CHAR(DATE '2046-12-31','J') )),'J'),
ROUND(dbms_random.value(1,200000))
);
i := i+1;
end loop;
end;
END;
mysql 中的程序几乎相同,我只是使用他们的本地随机生成器来获取值。
在开始之前,我在 oracle 中禁用了并行执行,并刷新缓存,在 mysql 中也禁用了缓存。
但是对于 50000 次插入,Oracle 在 Mysql 中有 15 秒和 30 秒的结果。
什么原因,你能帮忙吗?
【问题讨论】:
-
1000个原因,一个是服务器配置
-
嗯。 . .甲骨文拥有超过 30 年的持续改进,这家公司在产品上投入了大量资金。你很好奇为什么它比免费软件更快?
-
@BerndBuffen,我猜你会说,我的 dbms 不具备同等条件?我该如何解决?
-
附注:如果不是真的需要,不要使用近似浮点数据类型。两种 DBMS 都提供精度超过 60 位的精确十进制数据类型。
-
查看 MySQL 中的执行计划:EXPLAIN .... 或打开分析:SET profiling=on;显示配置文件......瓶颈是什么。在 my.cnf 中更改它并重试。我几乎可以肯定 MySQL 更快,但 Oracle 有更多功能
标签: mysql sql performance oracle11g sql-insert