Контакт с алгоритмом MySQL Temp Table для представлений

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

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

Как лучше всего иметь дело с этим хотя? Это была проблема, так как представления были реализованы более чем 5 лет назад, и я не знаю ни о каком усилии зафиксировать его. Этот вид проблемы существует в других популярных системах баз данных?

Прокрутите вниз в ссылке ниже туда, где она обсуждает, когда Алгоритм слияния не может использоваться для наблюдения то, что заставляет MySQL ухудшаться в использование ужасного Временного алгоритма Таблицы: http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/create-view.html

Что так плохо об этом? Временный алгоритм таблицы работает как так:

  1. Выполните представление "AS IS" в определении представления, не объединяя запрос где критерии пункта в него.
  2. Выведите получающиеся данные во временную таблицу.
  3. Отфильтруйте данные во временной таблице на основе запроса где критерии пункта - никакие индексы здесь также.

Таким образом, можно вообразить ад включенным здесь, когда у Вас есть 50 миллионов таблиц строки с целью определение как - глупый пример, но Вы понимаете:

create view last_order_date as 
    select max(order_date) last_date, username from orders group by username;

Пользователь мог бы затем записать:

select * from last_order_date where username = 'joejoe22' 

2 часа спустя результат возвращается...

Таким образом, как лучше всего справиться с этой ситуацией?

5
задан Khorkrak 29 May 2010 в 15:00
поделиться