Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化MySQL或表设计_Mysql_Sql_Database Design - Fatal编程技术网

优化MySQL或表设计

优化MySQL或表设计,mysql,sql,database-design,Mysql,Sql,Database Design,我对我的SQL作业感到困惑。我不是数据库专家。我正在使用MySQL 我有一张名为“新闻”的桌子 create table news title text not null, time DATE, ip varchar(15), reporter varchar(25), tag varchar(20), id int not null auto_increment, primary key(id) )engine=innodb; 我有一个

我对我的SQL作业感到困惑。我不是数据库专家。我正在使用MySQL

我有一张名为“新闻”的桌子

create table news
    title text not null,
    time DATE,
    ip varchar(15),
    reporter varchar(25),
    tag varchar(20),
    id int not null auto_increment,
    primary key(id)
)engine=innodb;
我有一个包含1000000行数据的txt文件“news2.txt”

我想优化我的sql以提高速度

这是我的SQL语句

SET UNIQUE_CHECKS=0;
SET AUTOCOMMIT=0;

load data local infile "e:/news2.txt" into table news fields terminated by ',' LINES TERMINATED BY '\n' (title,time,ip,reporter,tag); 

SET UNIQUE_CHECKS=1;
SET AUTOCOMMIT=1;
“news2.txt”包含类似于*“科学里德·怀亚特,2013/10/8,10.0.0.252,维瓦姆·维勒·努克·埃尼安(Vivamus dictum ultrices Curae,2013/10/8,10.0.252)”的内容*这是一行

执行时间为29.188s。我的桌子设计有什么问题吗?我能做些什么使它更快

数据加载 一百万个条目需要一些时间才能写入磁盘。检查表的大小,想象一下,它不仅仅是在复制一个文件,而是在进行一些计算,以便将其保存为DB记录

除非作业明确说明速度是关键(我怀疑这一点),否则这不值得担心

在一个普通的应用程序中,在26秒内向新闻表插入一百万个条目是非常好的性能。。。更不用说“那些新闻文章是从哪里找到的”?在现实生活中,应用层很可能会减慢速度

交易 您可以从那里删除“autocommit=0”(如果您不需要它),因为这意味着整个加载操作是以事务方式运行的,这意味着DB引擎需要在临时位置写入所有内容,并在提交数据之前检查(您拥有的一百万个)的每个插入是否成功

使用“autocommit=1”运行将允许DB引擎将每个插入作为事务处理


通常每个语句一个事务会产生一定程度的“事务”开销,最好运行事务批处理(每个事务50-100个语句),以最小化该开销,但是在非常大的事务情况下,开销会增加,无法保存在内存中,因此需要将其写入磁盘,这会降低工作速度。在这种情况下,最好每个语句使用一个事务(可以从内存运行)而不是每整批处理一个事务。

表非常简单,因此设计还可以。只是我认为您应该添加一些索引来加速对表的查询


但是,根据您的工作流程,有一种可能性。

您只是在加载数据。。。?我不会太在意速度。。。事实就是这样。查询可以优化,但我不确定您是否可以在这部分过程中做很多工作。您是在寻找一种工具来使用它还是以某种方式将其自动化?
29秒
的导入持续时间并不重要,因为您不会每秒钟重复一次。然而,导入到
MyISAM
存储引擎的表中可能比导入到
InnoDB
存储引擎的表中要快。在运行导入之前,您可以将其更改为
MyISAM
,导入之后更改为
InnoDB
。好的,嗯……我只是想知道是否有办法提高加载速度……我没有意识到29秒是一个可接受的结果。谢谢大家。顺便说一句,我还有另一个带有{user\u name,tag,user\id}的“user.txt”三个属性…我的设计合理吗?只是为了桌子。非常感谢。我不知道如何提高速度。。我看到一些文章说set'autocommit=0'可能会有帮助,所以我只是尝试了一下……但并没有让它变得更好。。。时间消耗仍然在29秒左右…现在我明白了…您将如何使用我的'news.txt'和'user.txt'设计表(可以是两个或更多)?谢谢你的回答