【问题标题】:yii multiple database queries or arrayyii 多个数据库查询或数组
【发布时间】:2014-04-25 22:48:11
【问题描述】:

我们正在 yii 中开发一个具有复杂 UI 的应用程序。我不是程序员,但注意到应用程序页面加载时间似乎很慢。

我打开MySQL查询日志,发现有很多重复查询的实例,例如“select x,y,z from table where id = 1”、“select x,y,z from table where id = 2”、“select x,y,z from table where id = 3”。将这些替换为单个“select x,y,z from table where id in (1,2,3)”所需的持续时间与运行单个查询之一几乎相同。总的来说,这样做可以将加载时间缩短一个数量级。在我看来,查询是在循环中发生的,而不是首先构造 where 子句,将所有数据检索到数组中,然后循环遍历数组。

当我向编程团队指出这一点时,我被告知在 PHP 中循环遍历数组与执行单独的 SQL 调用一样慢。鉴于我在其他编程语言方面的经验,我觉得这很难相信,看起来 DAO 很容易做到这一点。另一个问题似乎是复杂的模型。任何建议表示赞赏。

【问题讨论】:

    标签: yii


    【解决方案1】:

    这取决于。如果您的数组不会为将来调用的会话存储进行序列化,我认为查询内存上的数组比多次调用数据库更快。但我也认为这是不切实际的,除非你真的要使用所有数据,我的意思是,获取大量行并且你不会将它们全部显示给用户。而且我也认为这也无济于事,因为您浪费了数据库的力量,请参阅Massive PHP array vs MySQL Database?。我不确定我是否在正确的上下文中,但我的建议是,以某种方式首先尝试正确构建您的查询,以便您只查询您的数据库一次,如果信息过多,请使用分页并仅使用固定数量的行每次。希望对你有帮助...

    【讨论】:

    • 在我看来,在大多数情况下,对数据库进行了 10 到 20 次单次调用,而其中 1 次更难编写代码就足够了,并且与任何一次调用的持续时间相同。所以问题是是否值得努力进行编码。我们说的是 html 页面需要的 10 -20 行,而不是得到一堆不会立即使用的数据。每个页面都会接受许多这样的调用(总共可能有 100 个)。
    猜你喜欢
    • 2012-05-26
    • 2011-05-10
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多