选择行mysql的最佳方法

Posted

技术标签:

【中文标题】选择行mysql的最佳方法【英文标题】:best way for select row 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”。

谢谢!

【问题讨论】:

【参考方案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 行。它会快得多

以上是关于选择行mysql的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

测试 MySQL 表中是不是存在行的最佳方法

在 MySQL 中存储相当大的 JSON 对象的最佳方法是啥

使用 LEFT OUTER JOIN 检查相关行不存在的最佳方法是啥

在mysql中管理行过期的最佳方法

逐步查询 MySQL 数据库 - 最佳方法?

mysql 管理产品大小的最佳方法