Выполнение представления MySQL

У меня есть таблица приблизительно для 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.

Как делает, где пункт в представлении работает? Где пункт, примененный после представления, получает все строки? Как я устраняю эту проблему?

18
задан Peter O. 3 February 2013 в 04:27
поделиться

1 ответ

Речь идет об алгоритме просмотра , который использовался.

Алгоритм слияния хорошо работает с большинством индексов таблиц, и еще много чего - соблазнительный алгоритм - нет - во многих случаях ваши индексы будут просто плоскими и не будут использоваться вообще.

И есть много чуши, которая не поддерживает слияние

MERGE нельзя использовать, если представление содержит любую из следующих конструкций :

 * Агрегатные функции (SUM ( ), MIN (), MAX (), COUNT () и т. Д.) 
 * DISTINCT 
 * GROUP BY 
 * HAVING 
 * LIMIT {{1 }} * UNION или UNION ALL 
 * Подзапрос в списке выбора 
 * Относится только к буквальным значениям (в этом случае нет базовой таблицы) 
 
28
ответ дан 30 November 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: