Почему следующий запрос занимает столько времени в 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 занимает слишком много времени?"
Ну, так как для выполнения этого запроса MySQL должен перебирать все 50K строк в таблице, скопируйте их в временную таблицу (в памяти или на диске, в зависимости от размера), а затем возьмите первый 1000.
В MySQL, если вы хотите оптимизировать запросы с помощью LIMIT
, вам необходимо следовать некоторым практикам, которые предотвращают сканирование полного набора данных (в основном, индексы для сортируемого столбца).
См. Здесь: http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html