会限制查询的一个结果记录中,提高绩效在很大(ish)MySQL表,如果表只有一个匹配结果?

例如

 select * from people where name = "Re0sless" limit 1

如果只有一个记录与这个名字?并且怎么样如果 name 是主要的关键/设置独特?和它的价值更新的查询或将增益是最小的?

有帮助吗?

解决方案

如果列有

唯一指标:没有, 它没有更快的

一个非唯一指标:也许, 因为它会防止发送的任何额外的行超出第一匹配,如果有任何存在

没有索引:有的时候

  • 如果1或更多的行匹配的查询, 是的, 因为完整的表格的扫描将停止之后的第一行匹配。
  • 如果没有行匹配的查询, 没有, ,因为它将需要完成一个完整的表格的扫描

其他提示

如果你有一个稍微更加复杂的查询,与一个或更多连接的限制条款赋予的优化程序的额外信息。如果它希望相匹配两个表格和返回的所有行, 散列加入 通常是最佳的。散列加入是一种类型的加入,优化了大量的匹配。

现在如果优化知道你已经通过了限制1时,它知道这不会是处理大量数据。它可以恢复一个 循环加入.

根据该数据库(甚至数据库的版本),这可以产生巨大的影响。

来回答你的问题在顺序:1)是的,如果没有索引的名称。查询将结束,尽快为它找到第一个记录。脱掉的限制以及它已经做一个完整的表格的扫描每一个时间。2)。主/唯一钥匙保证是独一无二的。查询应停止运行,尽快为它找到该行。

我认为,该限制是什么后完成该数据集是发现和结果组正在建立起来的所以我也不指望它作出的任何差异。使得名字的主要关键将有一个明显的积极效果,但因为它将导致一个指数正在进行列。

如果"姓名"是唯一的表中,则有可能仍然是一个(非常非常小的)获得性能把限制的约束在您的查询。如果名字是主要的关键,将有可能没有。

是的,你将注意到的性能差异时,处理数据。一个记录所占空间较小,比多个记录。除非你正在处理的许多行,这将不会有太大的差异,但是一旦运行查询的数据已被显示给你,这是昂贵的、或处理与编程。无论哪种方式,一记录是很容易的多.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top