Представление MySQL всегда делает полное сканирование таблицы?

Вы не просто забыли поставить скобки вокруг np.array?

init_medians=np.array([...])
6
задан Alex 12 March 2009 в 04:08
поделиться

2 ответа

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

Править: Конечно, Представления будут использовать индексы на базовых таблицах так, чтобы само Представление было оптимизировано (иначе, они не имели бы никакого смысла вообще использовать), но потому что нет никаких индексов на Представлении, для ГДЕ запрос на Представлении не возможно быть оптимизированным.

Построение индексов для Представлений было бы дорогим так или иначе, потому что, в то время как я не попытался представить любые Представления, я вполне уверен, что временная таблица создается негласно и затем возвращенный набор результатов. Уже требуется много времени для построения временной таблицы, я не хотел бы представление, которое также пытается предположить, какие индексы необходимы. То, которое поднимает вторую точку, которая является тем MySQL, в настоящее время не предлагает метод для определения, какие индексы использовать для Представления поэтому, как это знает, какие поля должны быть индексированы? Это предполагает на основе Вашего запроса?

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

Если все это представление содержит, ВЫБОР ВСЕ ОТ table1, table2, table3; затем я должен был бы спросить, почему этот запрос должен быть в Представлении вообще? Если по некоторым причинам его абсолютно необходимое, Вы могли бы хотеть использовать хранимую процедуру для инкапсуляции запроса, поскольку Вы затем сможете получить оптимизированную производительность при поддержании преимущества более простого вызова к базе данных для набора результатов.

9
ответ дан 9 December 2019 в 20:49
поделиться

Я глубже изучил его, я упустил ключевую суть информации :( Мой запрос представления на самом деле имеет объединение с другой таблицей. Это заставляет представление использовать алгоритм ВРЕМЕННОЙ ТАБЛИЦЫ вместо Алгоритма слияния.

Алгоритм ВРЕМЕННОЙ ТАБЛИЦЫ не позволяет использование индексов в базовых таблицах.

Это, кажется, ошибка в MySQL и было сообщенным путем в 2006, но не похоже на него, был решен в 2009! http://forums.mysql.com/read.php?100,56681,56681

Похож я просто оказываюсь перед необходимостью переписывать запрос как внешнее объединение.

3
ответ дан 9 December 2019 в 20:49
поделиться
Другие вопросы по тегам:

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