像这样的查询基本上会解密每个 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%'
);
最佳答案
我无法判断该函数是否为每行或多行计算一次。这取决于查询优化器。您可以通过基准来建立它。
无论如何,这个查询效率很低。它将进行全表扫描并为每一行计算此函数。您不能在此处使用索引。您不会在具有多于几行的表上实现此查询。
关于mysql - 带解密的多个Where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407075/