Как работают представления MySQL?

Поскольку мой проект был независимым от других проектов с помощью призмы, мне нужно было снять флажок «Только строить проекты запуска и зависимости от запуска» в «Инструменты» - «Параметры -> Проекты и решения ->« Сборка и запуск ».

37
задан John Nall 20 January 2012 в 17:59
поделиться

1 ответ

Представление работает как таблица , но это не таблица. Его никогда не существует; это только подготовленный оператор SQL, который запускается, когда вы ссылаетесь на имя представления. IE:

CREATE VIEW foo AS
  SELECT * FROM bar

SELECT * FROM foo

... эквивалентно выполнению:

SELECT x.* 
  FROM (SELECT * FROM bar) x

MySQLDump никогда не будет содержать строк, которые нужно вставить в представление ...

Также почему я не могу использовать подзапросы в моем представлении ????

. К сожалению, это сделано (хотя и сомнительно). Существует множество ограничений для представлений MySQL, которые документированы: http://dev.mysql.com/doc/refman/5.0/en/create-view.html

Итак, если это просто воображаемая таблица / подготовленный оператор означает ли это, что теоретически он имеет такую ​​же производительность (или даже меньше), что и обычная таблица / запрос?


Нет.
С таблицей могут быть связаны индексы, которые могут ускорить извлечение данных (за некоторую плату за вставку / обновление).Некоторые базы данных поддерживают «материализованные» представления, то есть представления, к которым могут применяться индексы - что не должно вызывать удивления, поскольку MySQL не поддерживает , учитывая ограниченную функциональность представления (которая появилась только в v5 IIRC. , очень поздно к игре).

Поскольку представление является производной таблицей, производительность представления настолько хороша, насколько хорош запрос, на котором оно построено. Если этот запрос отстой, проблема с производительностью будет просто снежным комом ... Тем не менее, при запросе представления - если ссылка на столбец представления в предложении WHERE не заключена в функцию (IE: WHERE v.column LIKE .. . , not WHERE LOWER (t.column) LIKE ... ), оптимизатор может протолкнуть критерии (называемые предикатом) в исходный запрос, что ускорит его.

52
ответ дан 27 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

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