У меня есть таблица приблизительно для 100 000 пользователей в нем.
Первый случай:
explain select state, count(*) as cnt from users where state = 'ca'
Когда я делаю объяснить план относительно вышеупомянутого запроса, я получаю стоимость как 5 200
Второй случай:
Create or replace view vw_users as select state, count(*) as cnt from users
Explain select cnt from vw_users where state = 'ca'
Когда я делаю объяснить план по второму запросу, я получаю стоимость как 100 000.
Как делает, где пункт в представлении работает? Где пункт, примененный после представления, получает все строки? Как я устраняю эту проблему?
Речь идет об алгоритме просмотра , который использовался.
Алгоритм слияния хорошо работает с большинством индексов таблиц, и еще много чего - соблазнительный алгоритм - нет - во многих случаях ваши индексы будут просто плоскими и не будут использоваться вообще.
И есть много чуши, которая не поддерживает слияние
MERGE нельзя использовать, если представление содержит любую из следующих конструкций :
* Агрегатные функции (SUM ( ), MIN (), MAX (), COUNT () и т. Д.) * DISTINCT * GROUP BY * HAVING * LIMIT {{1 }} * UNION или UNION ALL * Подзапрос в списке выбора * Относится только к буквальным значениям (в этом случае нет базовой таблицы)