gpt4 book ai didi

mysql - 优化 MySQL 或表设计

转载 作者:行者123 更新时间:2023-11-30 23:10:57 25 4
gpt4 key购买 nike

我对我的 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' 包含类似*'Vivamus dictum ultrices Curae aliquet vel nunc Aenean,2013/10/8,10.0.0.252,Reed Wyatt,Science'* 这是一排。

执行时间为29.188s。我的 table 设计有什么问题吗?我该怎么做才能让它更快?

最佳答案

数据加载

一百万个条目需要一些时间才能写入磁盘。检查表的大小并想象它不只是复制一个文件,它正在执行一些计算以将其保存为数据库记录。

这不是什么值得担心的事情,除非家庭作业清楚地表明速度是最重要的(我怀疑它会如此)。

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

交易

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

使用“autocommit=1”运行将使数据库引擎将每个插入作为事务处理。

通常每个语句一个事务会产生一定程度的“事务性”开销,运行批量事务(每个事务 50-100 个语句)以最小化开销是一个很好的做法,但在非常大的事务的情况下,开销建立并且不能保存在内存中,因此需要将其写入磁盘,这会使工作速度变慢——在这种情况下,最好为每个语句(可以从内存运行)使用一个事务,而不是对整个批处理使用一个事务。

关于mysql - 优化 MySQL 或表设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19763232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com