具有解密的多个Where子句

时间:2013-08-23 15:56:16

标签: mysql sql

像这样的查询是基本上解密每个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%'
);

1 个答案:

答案 0 :(得分:2)

我无法确定是否对每行或更多行评估一次函数。这取决于查询优化器。你可以通过基准建立它。

无论如何,这个查询效率很低。它将执行全表扫描并为每一行计算此函数。你不能在这里使用索引。您不会在具有多行的表上实现此查询。