Производительность представления MySQL
У меня есть таблица для примерно 100 000 пользователей.
Первый случай:
explain select state, count(*) as cnt from users where state = 'ca'
Когда я делаю план объяснения для вышеуказанного запроса, я получаю стоимость как 5200
Второй случай:
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.
Как работает предложение where в представлении? Применяется ли предложение where после просмотра всех строк? Как исправить эту проблему?
Ответы
Ответ 1
Это о алгоритме просмотра, который был использован.
Алгоритм слияния хорошо работает в большинстве табличных индексов, а whatnot - алгоритм temptable - во многих случаях ваши индексы будут просто полностью не использоваться.
И там много дерьма, что слияние не поддерживает
MERGE не может использоваться, если вид содержит любое из следующих конструкции:
* Aggregate functions (SUM(), MIN(), MAX(), COUNT(), and so forth)
* DISTINCT
* GROUP BY
* HAVING
* LIMIT
* UNION or UNION ALL
* Subquery in the select list
* Refers only to literal values (in this case, there is no underlying table)