Запрос занимает столько времени в MySQL, но не в Oracle

0

Почему следующий запрос занимает столько времени в mysql, но не в oracle

select * from (select * from employee) as a limit 1000

Я тестирую этот запрос в базе данных oracle и MySQL с 50 000 000 записей в этой таблице.

Я знаю, что этот запрос должен записываться как

select * from employee limit 1000

Но для отображения данных и общего количества строк в нашей настраиваемой динамической сетке мы имеем только один запрос, мы используем простой select * from employee запроса select * from employee а затем добавляем ограничения или другие условия.

мы коротко эту проблему.

Но мой вопрос: "Почему такой запрос в mysql занимает слишком много времени?"

  • 0
    Поскольку используемая версия MySQL не оптимизирует запрос путем перезаписи / удаления производной таблицы. Попробуйте это с MySQL 5.6 или MariaDB 5.5 тоже.
  • 5
    Первый запрос в Oracle займет почти ровно 0 секунд, потому что он там не будет выполняться - синтаксис для Oracle недопустим.
Показать ещё 8 комментариев
Теги:
database

1 ответ

0

Ну, так как для выполнения этого запроса MySQL должен перебирать все 50K строк в таблице, скопируйте их в временную таблицу (в памяти или на диске, в зависимости от размера), а затем возьмите первый 1000.

В MySQL, если вы хотите оптимизировать запросы с помощью LIMIT, вам необходимо следовать некоторым практикам, которые предотвращают сканирование полного набора данных (в основном, индексы для сортируемого столбца).

См. Здесь: http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html

  • 0
    Хорошо @Galz, но почему этот запрос выполняется быстро в Oracle?
  • 0
    Потому что оптимизатор оракула лучше, чем оптимизатор mysql.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню