【问题标题】:MySQL, fetchone and LIMITMySQL、fetchone 和 LIMIT
【发布时间】:2016-06-13 09:18:53
【问题描述】:

这是一个python代码示例:

query = "SELECT * FROM users WHERE id = 17"
cursor.execute(query)
row = cursor.fetchone()

在这个例子中,查询最多返回一行;但有时我想用相同的代码从多行结果中获取单行,例如:

query = "SELECT * FROM users WHERE name LIKE 'foo%'"
cursor.execute(query)
row = cursor.fetchone()

在性能方面,显式写LIMIT 1会更好吗?

【问题讨论】:

  • 是的,既然你只需要 1 个,为什么还要获取更多?
  • @ juergen d - LIMIT 在 SELECT 之后起作用

标签: python mysql mysql-python query-performance


【解决方案1】:

不,LIMIT 子句在结果集的 SELECT 之后执行。如果您有很多 id = 17 的行,如果您不使用 LIMIT,则必须从服务器传输更多数据到客户端。

【讨论】:

  • 不正确;或者至少不总是正确的。在第二个示例中,假设INDEX(name),将恰好发生 1 次表探测;它将获得 one foo 行(或在那里找不到)。如果存在GROUP BY 和/或ORDER BY,则SELECT可能必须在应用LIMIT 之前收集整个结果集。
  • 问题中的组/顺序在哪里?
  • 由于没有GROUP/ORDERLIMIT 短路SELECT。 (可能还有其他例外情况。)正如我所读,您的回答说LIMIT 永远不会使SELECT 短路。
  • 是的,MariaDB 有很好的ROWS EXAMINED 功能,但有一些注意事项。它可以用于问题中的任一查询。但它没有看到在LIMIT 上添加任何内容。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 2014-01-09
  • 2020-08-19
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
相关资源
最近更新 更多