MySQL查询优化-为什么使用变量中的值比使用文字慢得多



更新:我自己在下面回答了这个问题

我正在尝试修复MySQL查询中的一个性能问题。我认为我看到的是,将函数的结果分配给变量,然后运行SELECT并与该变量进行比较相对较慢。

然而,如果为了测试起见,我将变量的compare替换为与字符串的compare,相当于我所知道的函数将返回的值(对于给定的场景),那么查询运行得更快。

例如:

...
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中的行,那么查询的速度就像你所期望的任何简单字符串比较一样快

为什么?

当我得到答案时,我已经写完了这个问题,所以还是发帖分享知识吧!

我意识到变音函数的返回值是UTF8。

与latin1字段相比,显然会产生相当大的性能开销。

我将变量赋值替换为:

SET @metaphone_val:= CONVERT(double_metaphone(p_parameter) USING latin1);

现在,查询的运行速度与我预期的一样快。

相关内容

  • 没有找到相关文章

最新更新