MySQL:LIMIT是否减少了对用户定义函数的调用次数?

时间:2014-05-20 11:47:54

标签: mysql limit user-defined-functions database-performance

我有一个计算上昂贵的用户定义函数,我需要对大型数据集使用。我不排序也不要求行数(没有FOUND_ROWS)。如果我将LIMIT指定为查询的一部分,那么MYSQL引擎在获取LIMIT行后是否实际上停止调用该函数,或者它是否针对整个数据集运行该函数?例如:

select cols, .. where fingerprint_match(col, arg) > score  limit 5;

理想情况下,如果第一(随机)行导致通过分数,则仅会调用fingerprint_match 5次。

2 个答案:

答案 0 :(得分:1)

正如Optimizing LIMIT Queries所述:

  

MySQL有时会优化具有LIMIT row_count子句且没有HAVING子句的查询:

[ deletia ]
     
      
  • 一旦MySQL向客户端发送了所需的行数,它就会中止查询,除非您使用的是SQL_CALC_FOUND_ROWS
  •   

答案 1 :(得分:-1)

我相信一旦找到指定数量的匹配,查询就会停止处理但仅在没有ORDER BY子句时才会停止处理。否则,它必须在应用限制之前查找并排序所有匹配项。

我对此的唯一证据是"LIMIT 0 quickly returns an empty set. This can be useful for checking the validity of a query."文档中的陈述。这告诉我,一旦满足限制,它就不会将where子句应用于任何行。

http://dev.mysql.com/doc/refman/5.6/en/limit-optimization.html