所以我在项目Mysql
中有数据库。
我有一个主表,主要人员可以更新和插入。
我的数据流量很大。我正在做的主要是阅读.csv文件并插入表格。
一切工作文件3天,但当表记录超过2000万时,数据库开始响应缓慢,并且慢了6000万。
我做了什么?
我在记录中应用了索引,我认为我需要它。 (用于快速搜索的where子句字段)。
我认为查询优化不会出问题,因为数据库工作正常3天,当数据填入表格时变慢。而当我达到6000万时,它工作得更慢。
你能告诉我如何处理这个问题?
我该怎么办?我应该每隔3天换一次数据还是什么?你在这种情况下做了什么。
答案 0 :(得分:0)
数据库的目的是存储巨大的信息。我认为问题不在于你的数据库,它应该是糟糕的查询,连接,数据库缓冲区,索引和缓存。以下原因使您的响应变慢。有关详细信息,请查看此link
答案 1 :(得分:0)
你希望加快哪些操作?
insert
操作加快速度的好方法是批量插入记录。例如,在每个insert
语句中插入1000条记录:
insert into test values (value_list),(value_list)...(value_list);
如果你的桌子有数千万条记录,那么一切都会变慢。这很常见。 为了在这种情况下加快速度,这里有一些建议:
答案 2 :(得分:0)
我在记录中应用了索引,我认为我需要它
是的,索引可以提高SELECT
查询的性能,但同时它会降低您的DML
操作,并且只要对索引列执行任何更改,就必须重新构建索引。
现在,这完全取决于您的业务需求,是否需要索引,是否可以拒绝SELECT
或DML
。
目前,许多行业使用两种不同的模式OLAP
进行报告和分析,使用OLTP
来存储实时数据(包括一些实时报告)。
答案 3 :(得分:0)
首先,我们现在可以帮助您存储哪种数据。
通常情况下,在3天内存储如此大量的数据是没有意义的,因为没有人能够以有效的方式使用它。因此,最好在存储到数据库之前减少数据。
e.g。
如果从设备获得测量值,给出一个毫秒的值,您应该考虑是否有任何用户要求特殊毫秒的特殊值,或者计算一次的平均值没有意义一秒钟,一分钟或一小时,或者每天一次? 如果你真的需要毫秒,但只有当用户深入了解时,你可以从主表创建一个表,只有一小时或一天的平均值或其他任何东西,并使用该表。只有当用户进入"毫秒"查看您使用主表并且必须忍受更糟糕的表现。
这一切当然只有在数据库数据是只读的情况下才有可能。如果数据库中的数据从应用程序更改(并且不仅仅通过CSV导入附加),则使用多个表将容易出错。
答案 4 :(得分:0)
对于.csv文件,请使用LOAD DATA INFILE ...
您使用的是InnoDB吗?你有多少RAM? innodb_buffer_pool_size
的价值是多少? 可能无法正确设置 - 基于随着数据增加而减慢的查询。
让我们看一个缓慢的查询。并SHOW CREATE TABLE
。通常是一种复合材料。索引是必需的。或重新制定SELECT
。