我第一次使用MySQL,并惊讶于与相比,基本查询需要多长时间才能完成。当涉及到数据库时,我是个新手,所以希望我能改变我的语法或配置中的一些基本内容,以使它“工作”。
我使用的是mySQL 5.7,Workbench 6.3。服务器/客户端位于同一台本地计算机上,只有一个用户(根用户)。
以这个例子为例。我有张简单的桌子:
CREATE TABLE original_table
(
myTimeStamp datetime,
PRIMARY KEY (`myTimeStamp`)
);有趣的是,从2009年到2017年,我每隔一分钟就会在桌子上放满连续的日期时间=420万条记录。现在,简单地将该表复制到另一个新表需要272秒。
CREATE TABLE new_table AS SELECT * FROM original_table使用insert进行测试需要花费209秒
CREATE TABLE new_table LIKE original_table;
INSERT new_table SELECT * FROM original_table;查看是令人惊讶的,因为CPU不会超过4%的容量,mysqld只占用CPU的0.1%-2%。工作台占用CPU的0.3 %。
一个有趣的线索是:如果我尝试复制到一个临时表,任务完成速度要快10倍(22秒),而Windows显示mysqld占用了5-10%的CPU:
CREATE temporary TABLE newTemp LIKE original_table;
INSERT newTemp SELECT * FROM original_table;你知道是怎么回事吗,或者这就是mySQL的表现?
发布于 2017-07-09 22:55:28
MySQL是一个高度可配置的数据库。开箱即用的设置对您的硬件和使用可能不是最佳的。本文介绍了有关配置InnoDB https://www.percona.com/blog/2007/11/01/innodb-performance-optimization-basics/的一些信息。
只是为了进行实验,执行这些命令,然后再次重复填充表,以查看是否有时间缩短。对临时表的插入更快,因为临时表停留在内存中,而插入到普通表的插入在每次insert语句之后都提交到磁盘。
set global innodb_flush_log_at_trx_commit=2
set global general-log=0一旦您完成了上述实验,让我们将您的插入附在事务中。不确定这会不会有什么不同,只是为了找出答案。
start transaction;
--- your insert sql
commit;https://stackoverflow.com/questions/45001764
复制相似问题