MySQL中的正确可选参数

时间:2009-09-03 14:58:28

标签: sql mysql performance

如果@param的值为null,则最好使用:

  1. WHERE t.column = COALESCE(@param, '')
  2. WHERE t.column = IFNULL(@param, '')
  3. WHERE (@param IS NULL OR t.column = @param)
  4. OR比将列与将返回指定列的所有值的值相比更昂贵吗?我的理解是选项1& 2将强制每次都进行全表扫描,而#3则不会。

3 个答案:

答案 0 :(得分:0)

我建议您在查询前使用EXPLAIN来尝试这三个选项,并查看MySQL认为与您的表和索引相关的内容。

答案 1 :(得分:0)

选项2看起来像语法错误; ISNULL只接受一个参数,并返回一个布尔值。

选项1和3可以返回不同的值。当@param为null时,选项1将仅返回t.column为空字符串的行,其中选项3将返回所有行。除非你在t.column上有一个索引,否则任何一个都会使用全表扫描;即便如此,当@param为空时,选项3将使用完整扫描。

答案 2 :(得分:0)

3是最好的,因为优化器会在优化器阶段将该评估短路并消除where子句。