Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 带解密的多Where子句_Mysql_Sql - Fatal编程技术网

Mysql 带解密的多Where子句

Mysql 带解密的多Where子句,mysql,sql,Mysql,Sql,像这样的查询基本上是解密每个where条件的用户名,还是只解密一次并将其应用于每个条件 SELECT * FROM TableA WHERE ( CONCAT_WS( ' ', AES_DECRYPT(TableA.FirstName, "fnkey"), AES_DECRYPT(TableA.LastName, "lnkey") ) LIKE '%RAY%' OR CONCAT_WS(

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

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


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

选择解密的名称,然后用您正在使用的任何编程语言过滤结果是否会更快?为什么要使用此选项,因为LIKE%%语法总是会弄乱索引。因此,始终需要进行完整的表格扫描。。如果表很大,这将非常慢。解密不需要完全扫描表吗?另一方面,是否值得为排序顺序索引设置一个字段,因此如果需要前5个,可以查看该数字,而不必解密整个表?