【问题标题】:Stopping MySQL query after the first row [closed]在第一行之后停止 MySQL 查询[关闭]
【发布时间】:2013-02-21 20:40:42
【问题描述】:

我有一段 MySQL 代码可以搜索相当长的 mysql 数据库。多次完成时,需要很长时间,尽管我唯一需要从代码中检查是否存在至少一个条目。是否可以在找到一行后指示mysql代码停止搜索?谢谢。

【问题讨论】:

  • 在查询中添加LIMIT 1
  • LIMIT 1 有什么问题?
  • 不会缩短搜索时间。

标签: php mysql optimization


【解决方案1】:

在查询结束时尝试LIMIT 1

【讨论】:

  • 这并没有使搜索变短,实际上它有时会变长。限制 1 只是让代码返回 1 行,而不是只搜索一行。
  • mysql reference manual 表示“一旦 MySQL 向客户端发送了所需数量的行,它就会中止查询”
  • 不,它仍然需要找到行 - 它只是不需要找到所有行
  • 我刚刚再次检查,没有 LIMIT 1,我的查询返回 33000 行和 LIMIT 1,显然是 1,但不幸的是两者都需要相同的时间(大约 1.2 秒)
  • 您不应该基于 phpMyAdmin 工具测试 MySQL 性能。两种情况下时间相同的原因很可能只有 95% 的时间消耗是 phpMyAdmin 的 PHP 代码,而最后 5% 是 MySQL,因此没有区别。尝试 MySQL Workbench 或命令行工具来真正测试查询的执行时间:)
【解决方案2】:

如果您只想搜索一件事,那么必须有一些与之关联的主键。因此,在查询中,您可以在 where 子句中包含一些内容,该子句只会带来一个结果。像这样的

    select * from students where id='123' 

由于主键是唯一键,所以不会有任何重复,只会进行一次搜索。

【讨论】:

    【解决方案3】:
    SELECT * FROM tablename LIMIT 1 OFFSET 0
    
    • LIMIT 将设置您想要返回的最大项目数
    • OFFSET 让您说明开始查询的起点

    结合使用 LIMIT 和 OFFSET,您可以非常精确地控制在多个会话中获取大量数据库行。

    或者使用更简单的 2 参数 LIMIT 函数(与 LIMIT、OFFSET 相同):

    SELECT * FROM tablename LIMIT 1, 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-26
      • 2015-02-12
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      相关资源
      最近更新 更多