tuner - ubuntu mysql performance tuning




Colonna calcolata in where-clause-performance (2)

Dal momento che non è possibile utilizzare una colonna calcolata in una clausola where in MySQL come questa:

SELECT a,b,c,(a*b+c) AS d FROM table
WHERE d > n
ORDER by d

devi usare

SELECT a,b,c,(a*b+c) AS d FROM table
WHERE (a*b+c) > n
ORDER by d

Il calcolo (nell'esempio "(a * b + c)" è eseguito una volta per riga o due volte? C'è un modo per renderlo più veloce? Trovo strano che sia possibile ORDINARE sulla colonna ma non avere un WHERE- clausola.


Potresti fare questo:

SELECT a,b,c,d FROM 
(SELECT a,b,c,(a*b+c) AS d) AS tmp
WHERE d > n
ORDER BY d

Ma non sono sicuro di quali potrebbero essere le implicazioni in termini di prestazioni.


Puoi utilizzare HAVING per filtrare su una colonna calcolata:

SELECT a,b,c,(a*b+c) AS d, n FROM table
HAVING d > n
ORDER by d

Si noti che è necessario includere n nella clausola SELECT perché funzioni.







performance