选择行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 中存储相当大的 JSON 对象的最佳方法是啥