我在oracle 11gR2和Mysql 5.6之间有一点点对比。
我在DBMS中使用3个表创建相同的模式 - 科 - 客户 - 贷款 loan有一个外键给客户端,而一个客户端有一个外键来分支,除了它们都有主键。
我创建了分支机构和客户端(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中有15s vs 30s。
是什么原因,你能帮帮忙吗?
答案 0 :(得分:1)
如果你一次“批量”100行,MySQL可以在3秒内完成。使用en_AU
可能更快。
您需要多少次插入50K行?换句话说,为什么重要?
告诉我们LOAD DATA
;可能存在各种问题(有利或不利)与索引或缺少它们,以及数据类型,尤其是“引擎”。
他们“完成了”吗? Oracle和MySQL都在“延迟写入”上做了一些变体,以避免让你等待。 15岁或30岁可能是可持续的,也可能是不可持续的。
您使用旋转驱动器还是SSD?带写缓存的RAID? autocommit与BEGIN的设置怎么样... COMMIT?你甚至做过提交吗?或者时间是否包括回滚?!在每个SHOW CREATE TABLE
之后提交并不是一个好主意,因为它有很大的开销。
设置是否调整得最佳?
表格中是否有数据?你插入“在最后”?还是随机的?
如果你已经回答了所有这些问题,我可能会有另外10个问题,这些问题将表明可以采取进一步的措施来使你的基准“证明”一个供应商或其他更快。< / p>