mysql - 带解密的多个Where子句

标签 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%'
);

最佳答案

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

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

关于mysql - 带解密的多个Where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407075/

相关文章:

sql - 在 MySQL SELECT 字段中使用 LIKE

php - 我的选择查询有什么问题?

php - laravel 查询生成器 : join dependent on primary content

sql - 返回由 plpgsql 函数插入的记录

asp.net - SQL:不等于运算符问题

sql - 更新涉及 groupby 子句的表,同时避免使用临时表

MySQL 子查询和临时表很慢

php - MYSQL PHP 按日期排序并将结果按每个日期分组

mysql - 如何将此 Excel 公式转换为 SQL?

sql - 在 PgAdmin 的 Postgresql 中使用反向 for 循环反转数字