【问题标题】:How can I improve MySQL database performance?如何提高 MySQL 数据库的性能?
【发布时间】:2018-01-21 08:31:08
【问题描述】:

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

我有一个主表,其中有用于更新和插入的主要人员。

我在数据上有巨大的数据流量。我正在做的主要是读取 .csv 文件并插入到表中。

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

我做了什么?

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

我认为查询优化不会是问题,因为数据库可以正常工作 3 天,并且当数据填充到表中时它会变慢。当我达到 6000 万时,它的工作速度会变慢。

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

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

【问题讨论】:

  • 除非您共享您的架构,包括索引、引擎等,否则没有人可以回答您的问题。另外,请解释什么行为是缓慢的,并量化它。插入速度慢吗?有多慢?查询慢吗?有多慢?以及究竟是什么查询。请包括所有相关的 SQL DML 和 DDL。
  • 这个问题最好直接到dba论坛
  • @Himanshusharma 仅供参考,您应该接受并支持正确答案并支持其他有用的答案。这需要每个人的社区。阅读此 meta.stackexchange.com/a/5235

标签: mysql database performance


【解决方案1】:

数据库的目的是存储大量信息。我认为问题不在于您的数据库,而应该是查询、连接、数据库缓冲区、索引和缓存不佳。这些是以下原因使您的反应变慢。欲了解更多信息,请查看link

【讨论】:

    【解决方案2】:

    我已在我认为需要它的记录中应用索引

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

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

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

    【讨论】:

      【解决方案3】:

      首先,我们现在知道您要存储哪种数据可能会有所帮助。

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

      例如

      如果您从设备获得的测量值每毫秒提供一个值,您应该考虑是否有任何用户在特殊毫秒内要求一个特殊值,或者计算一次的平均值是否更有意义一秒钟、一分钟或一小时,或者也许一天一次? 如果您真的需要毫秒,但只有在用户进行更深入的查看时,您可以从主表创建一个表,其中只有一个小时或一天的平均值或其他任何值,并使用该表。只有当用户进入“毫秒”视图时,您才使用主表并且不得不忍受更糟糕的性能。

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

      【讨论】:

        【解决方案4】:

        你想加快哪个操作?

        insert操作

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

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

        其他操作

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

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

        【讨论】:

          【解决方案5】:

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

          你在使用 InnoDB 吗?你有多少内存? innodb_buffer_pool_size 的值是多少? 可能设置不正确——基于查询会随着数据的增加而变慢。

          让我们看看一个慢查询。和SHOW CREATE TABLE。通常需要一个“复合”索引。或者改写SELECT

          【讨论】:

            猜你喜欢
            • 2010-10-01
            • 2023-03-08
            • 2011-01-01
            • 2016-10-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-25
            相关资源
            最近更新 更多