Mysql 带解密的多Where子句
像这样的查询基本上是解密每个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(
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个,可以查看该数字,而不必解密整个表?