【问题标题】:Two identical databases on same server with different running times同一台服务器上的两个相同的数据库具有不同的运行时间
【发布时间】:2014-03-10 10:24:23
【问题描述】:

我有两个相同的数据库,只是其中一个数据库有大约 500.000 个条目(分布在多个表中),而另一个数据库是空的。

如果我在空数据库中运行我的程序,则执行大约需要 10 分钟,而在具有 500k 条目的数据库中执行大约需要 40 分钟。我现在删除了一些条目(大约 250k 条目),它使执行速度加快了大约 10 分钟。奇怪的是,这些表没有被大量查询(只是一些非常简单的插入),所以我想知道这对执行有何影响。

另外,我所做的所有 SQL 语句(我运行了很多)都非常简单(没有复杂的连接,主要是插入),所以我想知道为什么某些具有 250k 条目的表会对性能产生如此影响。任何想法可能是什么原因?

【问题讨论】:

    标签: mysql performance


    【解决方案1】:

    以下情况可能是原因,但出于实际原因,您应该查看和分析您的查询,

    1. 虽然您认为您正在制作简单的插入,但从数据库的角度来看,它并不是一个简单的操作。 (对于您插入的每个条目,以下内容可能会更改和更新

      1. 索引
      2. 约束
      3. DB 的完整性 (PK-FK) 以及需要考虑的事项很多。上面的事情看起来很简单,但如果数量很大,则需要时间
    2. 检查查询量(如果正在执行大量插入查询,那么可能知道插入是独占操作,即它锁定表以进行更新,并且量高意味着更多的锁定时间和等待时间。 ) 为避免这种情况,您可能可以尝试链接或批量操作 Is bulk update faster than single update in db2?

    3. 数据分布也起着重要作用。如果您正在访问负载很重的表,那么从这些表中解析/访问/获取数据也将花费时间(这对于单个查询并不重要,但对于大量类似的查询确实会造成伤害)。尝试通过调整查询来最小化这种情况。

    【讨论】:

    • 我认为问题与表的大小有关,不一定与查询的数量有关。当对这些表为空的数据库执行相同数量的查询时,我的程序只需要大约 10 分钟而不是 40 分钟。查询的数量虽然完全相同。唯一的区别是查询的负载。有没有类似对数据库进行碎片整理的事情?
    • 对于更大的尺寸,索引创建、更新、完整性检查需要更多时间。如果您能完整阅读,这就是我想说的。 2 分和 3 分表示您应该考虑的其他可能性。
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多