【问题标题】:How many queries are too many?多少查询太多了?
【发布时间】:2011-07-09 09:33:32
【问题描述】:

我必须在一页中为一个人运行一次 10 次 mysql 查询。是不是很糟糕?我有很好的托管,但是,它会坏吗?非常感谢。

【问题讨论】:

标签: mysql performance


【解决方案1】:

我认为这不是问题。 10 个查询对于一个网站来说并不算多。毫无疑问,越少越好,但是当你有 3000 - 5000 时,你应该考虑你的结构。

当您通过一个包含数百万行而没有索引的表进行一次查询时,则为 10 到更多。

我见过一个 Typo3 网站,其中包含许多使用缓存发出 7500 个请求的扩展。当您安装并安装而不看会发生什么时,就会发生这种情况。

但是您可以看到您对查询较少的表进行了逻辑 JOIN。

【讨论】:

    【解决方案2】:

    这取决于查询总和将使用多少 CPU 周期。

    1 个查询可以消耗比 100 个更多的 CPU 周期。这完全取决于它们的内容。

    您可以按照本指南开始优化它们:http://beginner-sql-tutorial.com/sql-query-tuning.htm

    【讨论】:

    • 感谢本教程!
    【解决方案3】:

    10 个快速查询比 1 个慢查询要好。定义在响应时间、吞吐量、正常和窥视流量条件下什么是可接受的,并衡量这 10 个查询是否存在问题(即不尊重您的期望)。

    如果是,请尝试更改您的设计并找到更好的解决方案。

    【讨论】:

      【解决方案4】:

      嗯,有大查询和小查询。哪些是你的?通常,您应该尝试在尽可能少的查询中获取数据。随着流量的增加,数据库服务器上的负载越重,为客户端提供服务的难度就越大。

      【讨论】:

        【解决方案5】:

        多少查询太多了?

        我会改写你的问题:

        我的应用是否足够快?

        为您的应用程序提出“足够快”的业务定义(基于业务/用户要求),提出一种方法来模拟您的所有使用场景和预期负载,创建该负载和配置文件的模拟(跟踪/time) 它。

        这种方法相当于一种有根据的猜测。任何缺少它的东西都是纯粹的猜测,毫无价值。

        如果您的应用程序已经投入生产,并且在大多数情况下运行良好,您可以从用户那里获得反馈以确定痛点。从那里,您可以对这些痛点和相应的负载以及配置文件进行建模。

        记录您的结果。一旦您对应用程序进行了改进,您就有了一个工具来确定您所做的优化是否实现了您的目标。

        【讨论】:

          【解决方案6】:

          Drupal 网站每个请求通常会进行 150 到 400 多个查询。查询数据库所花费的总时间仍然不到 1 秒 - 杀死服务器的不是数量,而是查询的质量/复杂性(可能还有它们搜索的数据集的大小)。

          我不知道你在说什么查询,但在大多数网站上,10 根本就不是很多。

          如果您关心性能,您总是可以看到查询在数据库管理程序(例如 MySQL Workbench)中执行所需的时间。

          【讨论】:

          • 是的,我同意。根据我的 WordPress 网站上的页面,我每个请求运行 100-150 个查询,执行所有请求需要 0.2 秒。
          • 如果数据库服务器和 Web 服务器之间存在延迟(比如它们不在同一台机器上并且有大约 10 毫秒的延迟),它可能会发生 150 次查询可以变成 2 秒轻松拖延
          【解决方案7】:

          只是为其他好的答案添加一些不同的观点:

          首先,要同意,在 99% 的时间里,您所做的查询的类型和复杂性将比查询的数量更重要。

          但是,在极少数情况下,您的数据库服务器的网络路径存在高延迟(即数据库服务器是远程的或类似的,并不是说这是一个合乎逻辑或理智的设置,但我已经看到它完成了)然后您希望最小化完成的查询次数,因为每次与数据库服务器通信时,网络传输时间都将比计算查询所需的时间长一到两个数量级。这种情况确实会缩短您的页面加载时间,因此您确实希望最大限度地减少查询次数(实际上,您只是想更改服务器设置......)。

          【讨论】:

            【解决方案8】:

            当我假设您是开发新手时。我建议专注于避免过度处理的最合乎逻辑和最明显的方法。这通常是通过缓存第一次执行并在运行查询之前检查缓存结果来避免重复查询。

            之后不要花太多时间考虑查询的数量,而是专注于编写良好的代码。这意味着对类、方法和函数的良好使用。虽然还有很多东西要学,但您不希望与数据库的每次交互都过于复杂。

            享受你正在做的事情并保持整洁。这将导致更容易调试代码,当您了解进一步开发代码时,这本身可以带来更好的性能。如果原始作品写得好,应用程序的性能可以很快得到提高。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-01-19
              • 1970-01-01
              • 1970-01-01
              • 2011-03-26
              • 2010-12-01
              • 2011-02-09
              • 1970-01-01
              相关资源
              最近更新 更多