mySQL应该花这么长时间,还是配置错误?

时间:2017-07-09 22:48:33

标签: mysql mysql-workbench

我第一次使用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的表现?

1 个答案:

答案 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;