Представления MySQL и использование индекса - программирование
Подтвердить что ты не робот

Представления MySQL и использование индекса

Я думал начать использовать представления, чтобы уменьшить сложность кода и запросов в нашем проекте - некоторые из них имеют несколько объединений, и из того, что я понимаю, представления MySQL позволят нам немного упростить ссылку на эти данные в нескольких местах.

Там много разных вещей, где "MySQL не использует индексы для представлений", "У вас не может быть индексированного представления", "Только если вы используете MERGE"... Нет ясных, вырезать ответ.

Итак, чтобы прервать погоню: Представления MySQL используют индексы для таблиц, из которых они построены? Неплохо ли использовать представления вообще, потому что производительность будет ужасной или будет использовать индексы на базовых таблицах при выполнении своих объединений? Если я сортирую представление по столбцу, индексированному в таблице, все равно будет сортироваться так быстро, как обычно?

Выполнение моих исследований, похоже, указывает на то, что представления не используют индексы, но если это так, никто никогда их не использовал; очевидно, люди это делают, поэтому...?

Извините, если это кажется абсурдным.

4b9b3361

Ответ 1

Если вы запросите представление, MySQL рассмотрит использование индексов в базовых таблицах.

Однако невозможно добавить новый индекс в вычисляемый столбец в представлении. Я думаю, что это означает, что MySQL не имел индексированных представлений, в отличие от (например) индексированных представлений SQL Server.

Ответ 2

Представления MySQL используют индексы в таблицах, из которых они построены?

Да.

То, что люди, возможно, ссылаются, когда говорят, что MySQL doesn't use indexes for views имеет нечто, называемое materialized views или indexed views, в котором фактическое представление физически хранится в файловой системе в качестве обычной таблицы. Индексы могут быть созданы для этих представлений в некоторых СУБД, таких как Oracle или SQL Server. По существу, indexed views становится копией исходных таблиц, которые его составляют, и kept in sync automatically, вроде говоря.

Прочитайте эту статью о Индексированные представления на SQL Server, например.