首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL应该花这么长时间,还是配置错误?

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

Stack Overflow用户
提问于 2017-07-09 22:48:33
回答 1查看 111关注 0票数 1

我第一次使用MySQL,并惊讶于与相比,基本查询需要多长时间才能完成。当涉及到数据库时,我是个新手,所以希望我能改变我的语法或配置中的一些基本内容,以使它“工作”。

我使用的是mySQL 5.7,Workbench 6.3。服务器/客户端位于同一台本地计算机上,只有一个用户(根用户)。

以这个例子为例。我有张简单的桌子:

代码语言:javascript
复制
CREATE TABLE original_table
(
   myTimeStamp datetime,
   PRIMARY KEY (`myTimeStamp`)
);

有趣的是,从2009年到2017年,我每隔一分钟就会在桌子上放满连续的日期时间=420万条记录。现在,简单地将该表复制到另一个新表需要272秒。

代码语言:javascript
复制
CREATE TABLE new_table AS SELECT * FROM original_table

使用insert进行测试需要花费209秒

代码语言:javascript
复制
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:

代码语言:javascript
复制
CREATE temporary TABLE newTemp LIKE original_table; 
INSERT newTemp SELECT * FROM original_table;

你知道是怎么回事吗,或者这就是mySQL的表现?

EN

回答 1

Stack Overflow用户

发布于 2017-07-09 22:55:28

MySQL是一个高度可配置的数据库。开箱即用的设置对您的硬件和使用可能不是最佳的。本文介绍了有关配置InnoDB https://www.percona.com/blog/2007/11/01/innodb-performance-optimization-basics/的一些信息。

只是为了进行实验,执行这些命令,然后再次重复填充表,以查看是否有时间缩短。对临时表的插入更快,因为临时表停留在内存中,而插入到普通表的插入在每次insert语句之后都提交到磁盘。

代码语言:javascript
复制
set global innodb_flush_log_at_trx_commit=2
set global general-log=0

一旦您完成了上述实验,让我们将您的插入附在事务中。不确定这会不会有什么不同,只是为了找出答案。

代码语言:javascript
复制
start transaction;
--- your insert sql
commit;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45001764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档