#sql
#sql
Вопрос:
Я хотел бы оптимизировать следующие инструкции, предпочтительно в один запрос, если это возможно:
ВЫБЕРИТЕ * ИЗ ГДЕ status = ‘x’ И a_date < NOW() УПОРЯДОЧИТЬ По a_date ASC LIMIT 1; ВЫБЕРИТЕ * ИЗ ГДЕ status = ‘y’ УПОРЯДОЧИТЬ ПО a_date ASC LIMIT 1;
где вторая инструкция должна оцениваться только в том случае, если первая возвращает NULL.
У меня правильно настроена индексация, это скорее вопрос о том, могу ли я выдать один оператор вместо выдачи вторичного оператора после проверки логики приложения на наличие объекта null.
Спасибо за любой вклад.
Комментарии:
1. Если ваш вопрос соответствует описанию, есть тег «домашнее задание».
Ответ №1:
Попробуйте это:
SELECT * FROM a WHERE (status = 'x' AND a_date < NOW()) OR (status = 'y')
ORDER BY status ASC, a_date ASC LIMIT 1;
Здесь вы полагаетесь на тот факт, что статус ‘x’ будет предшествовать статусу ‘y’ в естественном порядке (если все наоборот, измените ASC на DESC в ORDER BY status
.