更新:我自己在下面回答了这个问题。
我正在尝试修复 MySQL 查询中的性能问题。我想我看到的是,将函数的结果分配给变量,然后运行 SELECT 并与该变量进行比较相对较慢。
但是,如果为了测试起见,我将变量的比较替换为与我知道该函数将返回的字符串文字等效的比较(对于给定的场景),那么查询运行得更快。
例如:
...
SET @metaphone_val := double_metaphone(p_parameter)); -- double metaphone is user defined
SELECT
SQL_CALC_FOUND_ROWS
t.col1,
t.col2,
...
FROM table t
WHERE
t.pre_set_metaphone_string = @metaphone_val -- OPTION A
t.pre_set_metaphone_string = 'PRN' -- OPTION B (Literal function return value for a given name)
如果我使用选项 A 中的行,则查询很慢。
如果我使用选项 B 中的行,那么查询速度就像您期望的任何简单字符串比较一样快。
为什么?