像这样的查询是基本上解密每个where条件的用户名还是只解析一次并将其应用于每个条件?
SELECT *
FROM TableA
WHERE (
CONCAT_WS(
' ',
AES_DECRYPT(TableA.FirstName, "fnkey"),
AES_DECRYPT(TableA.LastName, "lnkey")
) LIKE '%RAY%'
OR
CONCAT_WS(
' ',
AES_DECRYPT(TableA.LastName, "lnkey"),
AES_DECRYPT(TableA.FirstName, "fnkey")
) LIKE '%RAY%'
);
答案 0 :(得分:2)
我无法确定是否对每行或更多行评估一次函数。这取决于查询优化器。你可以通过基准建立它。
无论如何,这个查询效率很低。它将执行全表扫描并为每一行计算此函数。你不能在这里使用索引。您不会在具有多行的表上实现此查询。