我第一次使用MySQL,并且惊讶于基本查询与SQL Server Express相比需要多长时间。对于数据库,我是一个新手,所以我希望我可以在语法或配置方面改变一些基本的东西来使它“工作”#34;
我正在使用mySQL 5.7,Workbench 6.3。服务器/客户端位于同一本地计算机上,只有1个用户(root)。
举个例子。我有一张简单的表格:
CREATE TABLE original_table
(
myTimeStamp datetime,
PRIMARY KEY (`myTimeStamp`)
);
为了好玩,我在2009年至2017年间以1分钟的间隔填写了表格的连续日期时间= 420万条记录。现在,只需将该表复制到另一个新表需要 272秒。
CREATE TABLE new_table AS SELECT * FROM original_table
尝试插入需要 209秒:
CREATE TABLE new_table LIKE original_table;
INSERT new_table SELECT * FROM original_table;
查看Windows任务管理器是令人惊讶的,因为CPU没有超过4%的容量,而mysqld只占CPU的0.1-2%。 Workbench使用0.3%的CPU。
ONE INTERESTING CLUE:如果我尝试复制到临时表,则任务完成速度提高10倍( 22秒),Windows任务管理器显示mysqld占用CPU的5-10% :
CREATE temporary TABLE newTemp LIKE original_table;
INSERT newTemp SELECT * FROM original_table;
知道发生了什么,或者这是mySQL的表现?
答案 0 :(得分:1)
MySQL是一个高度可配置的数据库。开箱即用设置可能不适合您的硬件和使用。本文引发了一些关于配置InnoDB https://www.percona.com/blog/2007/11/01/innodb-performance-optimization-basics/
的看法仅为了实验,执行这些命令然后再次重复填充表以查看是否存在时间缩短。对临时表的插入更快,因为临时表保留在内存中,而插入到普通表中的每个插入语句后都会将其提交到磁盘。
set global innodb_flush_log_at_trx_commit=2
set global general-log=0
完成上述实验后,让我们将您的插入包含在一个事务中。不确定它是否会产生影响,但仅仅是为了找到它。
start transaction;
--- your insert sql
commit;