我真的想知道在将表列与相同的表列(如
)进行比较时会有任何性能影响select id, name from person
where name = coalesce(NULLIF(:application_parameter,''),name)
所以在上面的示例中,如果我没有从我的应用程序中接收参数(如果它为空或空白),那么查询将是
select id, name from person
where name = name
这只是一个示例,但在我的应用程序中,它确实是一个复杂的查询。我知道有一些替代方法就像创建动态查询一样(只有在你需要时才附加条件)。
但是我只感兴趣,如果我将列与同一列进行比较,就知道性能影响会是什么。
答案 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;
因此条件得到优化: - )