MySQL alias w klauzuli WHERE / HAVING (wydajność)

MySQL alias w klauzuli WHERE / HAVING (wydajność)
NewUser2k13
  • Rejestracja:około 12 lat
  • Ostatnio:4 miesiące
  • Postów:217
0

Potrzebuję w warunku WHERE mojego zapytania sprawdzić czy cena produktu (lub cena promocyjna produktu) mieści się w danych widełkach.
Obie ceny są w osobnych tabelach i zapytanie ma taką postać:
SELECT p.price, (SELECT .. FROM) as special FROM product p LEFT JOIN .... WHERE (price >= 0 AND price <= 600) OR (special >= 0 AND special <= 600);

Oczywiście sypie ono błędem Unknown column 'special' in 'where clause'
Tutaj z pomocą mogłoby przyjść chyba HAVING - jednak czytałem gdzieś że jest ono sporo wolniejsze od where . Jeśli to prawda to jak bardzo spowalnia?
Może jest jakaś inna opcja, o której nie pomyślałem lub po prostu nie mam pojęcia?

Marcin.Miga
  • Rejestracja:ponad 17 lat
  • Ostatnio:dzień
  • Postów:2794
0

Nazwy kolumn znane są dopiero po WHERE, a przed ORDER BY.
HAVING służy do zupełnie czegoś innego - do filtrrowania wartości zagregowanych przez GROUP BY.
Twoim problem jest użycie zapytania skorelowanego, które jest wykonywane dla każdego rekordu. Nie wiem, czy można bardziej spowolnić wykonanie zapytania...

abrakadaber
abrakadaber
można - można dorzucić drugie zapytanie skorelowane :p

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.