更快地在MYSQL中查询或使用PHP逻辑

时间:2009-05-18 16:44:48

标签: php mysql performance

我有一个页面会根据类别ID从多个类别中提取许多标题。

我想知道是否更有意义拉出所有标题,然后通过PHP if / ifelse语句对它们进行排序,或者最好运行多个查询,每个查询都包含每个类别的标题。

6 个答案:

答案 0 :(得分:8)

为什么不在一个查询中执行此操作?类似的东西:

SELECT headline FROM headlines WHERE category_id IN (1, 2, 3, ...);

如果您使用PHP过滤标题,请考虑您将扔掉多少。如果你最终只删除了10%的头条新闻,那么当你丢掉90%的结果时,这并不重要。

答案 1 :(得分:2)

这些问题总是很难回答,因为情况决定了最好的方法。从来没有一个真正正确的答案,只有更好的方法。根据我的经验,您是否尝试在PHP或数据库中进行工作并不重要,因为您应该始终尝试使用memcached等缓存引擎来缓存任何昂贵操作的结果。这样你就不会花费很多时间在db或php本身,因为结果将被缓存并立即准备好使用。当谈到它时,请使用像xDebug这样的工具来分析您的应用程序,您认为您的性能瓶颈只是猜测。

答案 2 :(得分:0)

通常最好不要重载数据库,因为如果有多个同时查询,可能会导致瓶颈。

但是,在PHP中处理您的处理通常通常,因为Apache会根据需要处理多个请求来分叉线程。

像往常一样,这一切都归结为:“有多少流量?”

答案 3 :(得分:0)

MySQL已经可以为您选择和排序数据了。我建议懒惰并使用它。

此外,我还会查找(1)查询,该查询一次性获取所有类别及其标题。 ORDER BY类别,发布日期还是其他内容?

答案 4 :(得分:0)

每次去数据库都会花费你一些成本。返回您随后决定忽略的额外数据会花费您一些成本。因此,几乎可以肯定让数据库进行修剪。

我确信有人可以提出一些案例,决定你需要哪些数据会使查询变得非常复杂,因此数据库难以优化,而你可以轻松地在代码中完成。但是,如果我们谈论的是“从类别='体育'的故事中选择标题”,然后是“从类别='政治'的故事中选择标题”,然后“从类别='健康'的故事中选择标题”等,而不是“选择类别,故事中的标题(“健康”,“体育”,“政治”)中的类别,后者显然更好。

答案 5 :(得分:0)

关于“更快速地在MYSQL中查询或使用PHP逻辑”的主题,这就是十年后我如何解决这个问题的方法。我确定正确的答案是“取决于”。有太多的示例使用数据库节省了编写PHP代码的时间....但是也有很多示例通过编写PHP代码节省了过于复杂的MySQL查询的时间。

这里没有正确的答案。如果您像我一样最后来到这里,那么我所建议的最好方法就是尝试使用您所拥有的技能来解决您的问题。首先从查询开始并尝试解决它,如果遇到问题,则开始考虑仅收集数据并通过PHP代码运行逻辑以提出解决方案。

最终,您需要解决一个问题....如果您解决了它,但是它还不够快,那就是另一个问题...优化工作可能最终意味着您返回编写更多的MySQL逻辑。

使用80/20规则,并尝试尽快将事物以80%的方式到达那里。一旦可行,您可以返回并进行优化。花费所有的精力在第一次使它完美上肯定会意味着您错过了最后期限。

那是我的$ 0.02