【问题标题】:Will databases with a large set of records affect read speed? (MySQL)拥有大量记录的数据库会影响读取速度吗? (MySQL)
【发布时间】:2012-06-05 14:31:34
【问题描述】:

我们公司最近与特许经营权签约,为他们的客户提供我们的 POS(收银机)应用程序,这导致我们每周有大约 3-5 次新注册。目前,我们为每个新客户创建应用程序数据库的副本,但我已经可以看出,这种方法最终可能会让我们崩溃。我们在想也许最好为所有诊所使用一个数据库,这些诊所由每张表上的某种形式的客户 ID 标识。

现在我们就这个话题进行了一些辩论:一位同事说拥有一个包含 50,000 人的大表会使事情变得太慢,我们必须优化整个应用程序。另一位同事说 MySQL 是为处理大型数据库而设计的,只要您在每个查询 WHERE 子句中指定客户端 ID,您就会收到数据的子集,而速度几乎没有变化。

从大表(100,000+)中选择数据子集与从较小表中选择相同数量的行有显着的速度差异吗?

此外,任何关于数据库设计方式的建议将不胜感激。

【问题讨论】:

  • 不,100k条记录是一个比较小的表;如果您的数据库服务器足够好,性能影响将是最小的。与您必须首先测试的所有内容一样。但是,您必须记住,您的客户可能不希望将数据与其竞争对手的数据合并。

标签: mysql database optimization query-optimization where-clause


【解决方案1】:

数据大小影响性能,但是通过正确的索引,在 50-100k 记录中查找应该没有任何问题。我使用的生产数据库(约 125 万条记录)通过主键查找记录所需的时间可以忽略不计(不到 0.005 秒)。

还是要看你的实际使用;您最终可能不得不优化一些查询并添加一些额外的索引。

【讨论】:

    【解决方案2】:

    我会把它们分成几张小桌子,而不是一张又长又大的桌子。如果设计和索引正确,从长远来看应该会更快。

    【讨论】:

    • 你的陈述有什么理由?
    【解决方案3】:

    为了提高选择(读取)查询的速度,您可以为查询所依据的列添加索引。

    例如,如果您通过某种诊所标识符进行查询,您可以在该列上放置一个索引。这将帮助数据库遍历数据并找到与您的条件匹配的记录,而无需查看数据库中的每条记录(这是发生减速的地方)。如果将来您按不同的条件(比如日期)进行查询,您也可以在该列上放置一个索引。

    请记住,添加索引会提高运行时性能,但会增加存储数据所需的物理磁盘大小。

    【讨论】:

    • 我认为索引是由问题所暗示的。
    • 问题中的情境线索影响了我回答的详细程度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2012-01-22
    • 2014-12-16
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多