Подтвердить что ты не робот

Вычисленный столбец в where-clause - производительность

Поскольку вы не можете использовать вычисляемый столбец в where-clause в MySQL, как это:

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

вы должны использовать

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

Является ли вычисление (в этом примере "(a * b + c)" выполняется один раз за строку или два раза? Есть ли способ сделать это быстрее? Мне кажется странным, что можно ЗАКАЗАТЬ на столбе, но не иметь предложение WHERE.

4b9b3361

Ответ 1

Вы можете использовать HAVING для фильтрации в вычисленном столбце:

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

Обратите внимание, что вам нужно включить n в предложение SELECT, чтобы это работало.

Ответ 2

Вы можете сделать это:

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

Но я не уверен, какие последствия могут иметь последствия.