MySQL VIEW против встроенного запроса, какой из них быстрее? - PullRequest
3 голосов
/ 15 июня 2010

Я собираюсь оптимизировать встроенный запрос MySQL с помощью представления, но я не уверен, даст ли он эффект:

SELECT id FROM (SELECT * FROM t);

Я хочу преобразовать его в:

CREATE VIEW v AS SELECT * FROM t; 
SELECT id FROM v;

Я слышал об «индексированных представлениях» в SQL Server, но я не уверен насчет MySQL. Любая помощь будет оценена. Спасибо!

Ответы [ 4 ]

2 голосов
/ 15 июня 2010

Индексированные представления в SQL Server обычно называются «материализованными представлениями», которые MySQL не поддерживает. Поддержка MySQL VIEW довольно ограничена по сравнению с другими поставщиками - ограничения перечислены в их документации .

Нормальное представление - это просто подготовленный оператор SQL - нет разницы между использованием двух приведенных вами примеров. В некоторых случаях предложение WHERE при выборе из представления может быть вставлено оптимизатором в запрос VIEW, но оно полностью вне вашего контроля.

0 голосов
/ 15 июня 2010

Это примерно то же самое. Будет ли это быстро или нет, это зависит от ваших показателей.

MySQL кэширует результаты запросов, поэтому, если ваши запросы одинаковы между выполнениями и если базовый набор данных одинаков (новые записи не добавлены), он будет возвращать кэшированные результаты при следующем выполнении запроса.

0 голосов
/ 15 июня 2010

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

Представление ведет себя немного по-другому, см. Создать представление

0 голосов
/ 15 июня 2010

Представление может быть быстрее (возможно), но почему бы вам просто не проверить его? Или выполните EXPLAIN для обоих запросов, чтобы увидеть, как они будут выполняться?

...