У меня есть представление с двумя отдельными запросами с объединением всех. Например:Как оптимизировать просмотр с помощью Union All
CREATE VIEW MyView AS
SELECT foo.id, bar.data
FROM foo
INNER JOIN bar ON foo.id = bar.id
UNION ALL
SELECT baz.id, baz.data
FROM baz
Я затем запустить отборное заявление против того, как это:
SELECT * FROM MyView WHERE id = 1
Идентификатор 1 существует только в первом отборного заявления. Тот, который имеет таблицы foo
и bar
, но соединение с таблицей baz
по-прежнему вызывает замедление работы. Это быстрее, если вывести союз. Я должен оставить его там, потому что иногда будет использоваться идентификатор, который будет возвращать результаты из второго оператора select.
Мой вопрос: есть ли способ помочь серверу sql знать, что во второй части союза нет результатов, поэтому ему не нужно запускать этот запрос?
Все эти данные были в одной таблице. Это новая структура данных, и все наши старые приложения будут полагаться на это представление для чтения данных из этой новой структуры данных. Вот почему мы не знаем, какая таблица будет на самом деле иметь результаты заранее.
Если вы знаете заранее строки вы ищете от первой таблицы, запроса, непосредственно – Amit
Кстати, если вы реальный запрос похож на это, даже не включать 'foo', использовать' bar' напрямую, у него есть все необходимые данные. – Amit
Нет, это просто пример. В действительности есть поля, которые нам нужны из обеих таблиц. Я сделал править, объясняя, почему я не знаю заранее, какая таблица будет иметь нужный нам результат. – rgvassar