Оптимизация SQL-запросов

#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 .