代码之家  ›  专栏  ›  技术社区  ›  Alex

MySQL数据库查询-速度

  •  0
  • Alex  · 技术社区  · 14 年前
    • 一个数据库调用可以获得不受限制的条目(可以是10个或10.000个),如下所示:

      SELECT * FROM boo WHERE id = %d AND (approved = '1' OR (user = %d AND approved = '0'))

    • 两个数据库调用,一个只得到10个条目,另一个只得到一个条目:

      SELECT * FROM boo WHERE id = %d AND approved = '1' LIMIT 10

      SELECT * FROM boo WHERE user = %d AND approved = '0'

    注意,我不能自己进行数据库查询。我只能使用一组函数来执行上面的查询。。。

    哪个选项更有效/更快?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Zaki Saadeh    14 年前

    这确实很难回答,但这里有一个提纲需要考虑以获得更好的性能:

    1. 您没有提到您正在索引的列(如果是)。索引要选择的列和使用条件的列可以帮助您获得更好的性能。请记住,索引将招致较重的写入成本,等等。如果您对这些列的常见情况是查找,我会说去索引。

    2. 确保选择了实际需要的列,而不是全部选择。这是另一个能让你有更好表现的因素。

    3. 请记住:每个查询都有自己的开销。添加更多的查询将产生更多的成本。

    4. 记住:你需要真正重视平均表现。例如,我看到您的一个查询依赖于某个用户。问问你自己,这些用户是谁,他们只是随机的网站用户,会有一些相关的记录?或者这些用户是一个紧密的社区,不断地发布和有很多评论与他们相关?这些问题将帮助你确定和近似返回结果的数量(平均值),并且应该用来做出一个好的决定,决定你应该采用哪种方式。

    希望能有帮助!

        2
  •  1
  •   ysth    14 年前

    试试看?

    假设它们位于具有适当索引的大表中,则这可能是最快的:

    SELECT * FROM boo WHERE id = %d AND approved = '1' LIMIT 10
    UNION ALL
    SELECT * FROM boo WHERE user = %d AND approved = '0'
    
        3
  •  1
  •   Nands    14 年前

    考验你自己。使用EXPLAIN可以了解发生了什么