【问题标题】:best way for select row mysql选择行mysql的最佳方法
【发布时间】:2012-06-07 06:38:06
【问题描述】:

以下哪个符号更好?

SELECT id,name,data FROM table WHERE id = X

SELECT id,name,data FROM table WHERE id = X LIMIT 1

我认为它不应该有“LIMIT”。

谢谢!

【问题讨论】:

    标签: mysql database row mysql5


    【解决方案1】:

    即使您要获取 1 条记录,也始终将 LIMIT 与 select 语句一起使用,因为它会加快您的查询速度。所以使用:

    SELECT id,name,data FROM table WHERE id = X LIMIT 1
    

    例如: 如果您的表中有 1000 条记录而不是使用

    SELECT id,name,data FROM table WHERE id = X
    

    即使找到该 id,它也会遍历 1000 条记录 但是如果你像这样使用 LIMIT

    SELECT id,name,data FROM table WHERE id = X LIMIT 1
    

    当找到第一条记录时它将停止执行。

    【讨论】:

    • 此答案仅适用于没有唯一索引的情况。当存在唯一索引时(如果该列称为 id,那么它可能确实 - 或应该 - 具有唯一索引)两个查询很可能都使用该索引。
    【解决方案2】:

    如果id 存在唯一约束,那么它们将完全相同。

    如果没有唯一约束(我会在名为 id 的列上发现这非常令人惊讶),那么哪个更好取决于您想要做什么:

    • 如果您想查找匹配条件的所有行,请不要使用LIMIT
    • 如果您想找到与条件匹配的任何行(并且您不在乎哪一行),请使用LIMIT 1

    【讨论】:

    • 句子“limit”在这个查询中使用了更多的资源。你也这么认为吗?
    • @OlafErlandsen:为什么使用 LIMIT 会使用更多资源?你有引用吗?
    • 我不确定。我认为它有更多的代码需要解释。现在,虽然文档说:“限制”有助于带来特定范围的结果。
    • @OlafErlandsen:充其量只是一个微优化(如果有可测量的差异的话)。如果差异实际上是您关心的问题,那是因为您正在快速连续地触发数千个 select 语句,每个语句获取一行。如果您这样做,那么您很有可能是做错了。每个查询获取更多数据。不是 1000 个查询,每个查询都获取一行,而是将其更改为一个查询,一次获取 1000 行。它会快得多
    猜你喜欢
    • 2013-02-28
    • 1970-01-01
    • 2011-09-27
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多