如何提高MySQL数据库性能?

时间:2018-01-21 08:31:08

标签: mysql database performance

所以我在项目Mysql中有数据库。

我有一个主表,主要人员可以更新和插入。

我的数据流量很大。我正在做的主要是阅读.csv文件并插入表格。

一切工作文件3天,但当表记录超过2000万时,数据库开始响应缓慢,并且慢了6000万。

我做了什么?

我在记录中应用了索引,我认为我需要它。 (用于快速搜索的where子句字段)。

我认为查询优化不会出问题,因为数据库工作正常3天,当数据填入表格时变慢。而当我达到6000万时,它工作得更慢。

你能告诉我如何处理这个问题?

我该怎么办?我应该每隔3天换一次数据还是什么?你在这种情况下做了什么。

5 个答案:

答案 0 :(得分:0)

数据库的目的是存储巨大的信息。我认为问题不在于你的数据库,它应该是糟糕的查询,连接,数据库缓冲区,索引和缓存。以下原因使您的响应变慢。有关详细信息,请查看此link

答案 1 :(得分:0)

你希望加快哪些操作?

insert操作

加快速度的好方法是批量插入记录。例如,在每个insert语句中插入1000条记录:

insert into test values (value_list),(value_list)...(value_list);

其他操作

如果你的桌子有数千万条记录,那么一切都会变慢。这很常见。 为了在这种情况下加快速度,这里有一些建议:

  • 优化您的表定义。这取决于你的具体情况。创建索引是一种常见的方式。
  • 优化您的SQL语句。显然,一个好的SQL语句运行得更快,而一个糟糕的SQL语句可能会成为性能杀手。
  • 数据迁移。如果经常使用部分数据,您可以将不经常使用的数据转移到另一个大表。
  • 拆分。这是一种更复杂的方式,但通常用于大数据系统。

答案 2 :(得分:0)

  

我在记录中应用了索引,我认为我需要它

是的,索引可以提高SELECT查询的性能,但同时它会降低您的DML操作,并且只要对索引列执行任何更改,就必须重新构建索引。

现在,这完全取决于您的业务需求,是否需要索引,是否可以拒绝SELECTDML

目前,许多行业使用两种不同的模式OLAP进行报告和分析,使用OLTP来存储实时数据(包括一些实时报告)。

答案 3 :(得分:0)

首先,我们现在可以帮助您存储哪种数据。

通常情况下,在3天内存储如此大量的数据是没有意义的,因为没有人能够以有效的方式使用它。因此,最好在存储到数据库之前减少数据。

e.g。

如果从设备获得测量值,给出一个毫秒的值,您应该考虑是否有任何用户要求特殊毫秒的特殊值,或者计算一次的平均值没有意义一秒钟,一分钟或一小时,或者每天一次? 如果你真的需要毫秒,但只有当用户深入了解时,你可以从主表创建一个表,只有一小时或一天的平均值或其他任何东西,并使用该表。只有当用户进入"毫秒"查看您使用主表并且必须忍受更糟糕的表现。

这一切当然只有在数据库数据是只读的情况下才有可能。如果数据库中的数据从应用程序更改(并且不仅仅通过CSV导入附加),则使用多个表将容易出错。

答案 4 :(得分:0)

对于.csv文件,请使用LOAD DATA INFILE ...

您使用的是InnoDB吗?你有多少RAM? innodb_buffer_pool_size的价值是多少? 可能无法正确设置 - 基于随着数据增加而减慢的查询。

让我们看一个缓慢的查询。并SHOW CREATE TABLE。通常是一种复合材料。索引是必需的。或重新制定SELECT