将列与同一列

时间:2015-08-18 14:35:30

标签: mysql sql

我真的想知道在将表列与相同的表列(如

)进行比较时会有任何性能影响
select id, name from person
where name = coalesce(NULLIF(:application_parameter,''),name)

所以在上面的示例中,如果我没有从我的应用程序中接收参数(如果它为空或空白),那么查询将是

select id, name from person
where name = name

这只是一个示例,但在我的应用程序中,它确实是一个复杂的查询。我知道有一些替代方法就像创建动态查询一样(只有在你需要时才附加条件)。

但是我只感兴趣,如果我将列与同一列进行比较,就知道性能影响会是什么。

2 个答案:

答案 0 :(得分:1)

是。这个版本:

where name = coalesce(NULLIF(:application_parameter,''),name)

不会利用name上的索引。该函数的使用阻碍了索引优化。

很难获取查询以获取参数和使用索引。你可以尝试:

where name = :application_parameter or :application_parameter is NULL

MySQL可能会正确优化这一点。否则,这可能会成功:

select id, name
from person
where :application_parameter is NULL
union all
select id, name
from person
where name = :application_parameter;

答案 1 :(得分:1)

要查看mysql中的性能影响,您可以在优化器获得后查看查询。做一个

$scope.product.images

这将生成一个带有优化器结果的WARNING。你可以通过

获得它
EXPLAIN EXTENDED SELECT aCol FROM aTable WHERE aCol = aCol;

在这里你会发现:

SHOW WARNINGS;

因此条件得到优化: - )