0

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

1 回答 1

2

我无法判断该函数是否为每一行或更多行评估一次。这取决于查询优化器。您可以通过基准建立它。

无论如何,这个查询是非常低效的。它将执行全表扫描并为每一行计算此函数。您不能在此处使用索引。您不会在多于几行的表上实现此查询。

于 2013-08-23T16:09:06.420 回答