
Který MySQL dotaz je lepší
Ahoj, v MySQL databázi máme uložená data pomocí AES_ENCRYPT a tedy když je selectujem, tak používáme AES_DECRYPT. Ale teď potřebujeme podle těchto dat i výsledky řadit a zajímalo by mě, který z níže uvedených příkladů/způsobů je lepší - resp. optimálnější/rychlejší (případně zda je to stejné):
SELECT ID, CONCAT(AES_DECRYPT(SURNAME,...), ' ',AES_DECRYPT(NAME,...)) AS FULLNAME,...
FROM user
WHERE...
ORDER BY AES_DECRYPT(SURNAME,...) ASC, AES_DECRYPT(NAME,...) ASC
nebo:
SELECT ID, CONCAT(AES_DECRYPT(SURNAME,...), ' ',AES_DECRYPT(NAME,...)) AS FULLNAME, AES_DECRYPT(SURNAME,...) AS SURNAME_DECRYPT, AES_DECRYPT(NAME,...) AS NAME_DECRYPT
FROM user
WHERE...
ORDER BY SURNAME_DECRYPT ASC, NAME_DECRYPT ASC
Díky za odpověď
Jestli to dobre chapu, asi bych volil druhou moznost. Decryptujes v dotazu jen jednou a pak to muzes pouzit nekolikrat, v prvnim pripade musis v ramci jednoho dotazu decryptovat pokazde kdyz to budes chtit pouzit.
ahoj, díky za odpověď, no potřebuji dostat např. jméno a příjmení v CONCAT() ale zároveň ten seznam musí být seřazen dle příjmení a jména
V prvním případě decryptuju v CONCAT a pak decryptuju v order by
V druhém případě decryptuju v CONCAT a pak ještě jednou zvlášť (SURNAME_DECRYPT a NAME_DECRYPT) a to použiju pro sort... Výsledek bude stejný
A teď co je pro DB lepší - jestli např v prvním případě nehrozí, že DB nejdřív decryptuje všechny položky v DB, pak podle nich seřadí a pak udělá výběr... (to ale asi je blbost)
Anebo DB udělá nejdřív výběr dat a pak udělá order a v tom případě jsou oba dotazy výkonově stejné, ale druhý dotaz má výhodu jak píšeš - data mohu použít na více místech