oracle выполняет полное сканирование таблицы, но так быстро возвращает результаты
Когда я открываю TOAD и делаю select * from table
Результаты (первые 500 строк) возвращаются практически мгновенно. Но план объяснения показывает полное сканирование таблицы, и таблица очень большая. Почему результаты так быстро?
2 ответа
В общем случае Oracle не нужно материализовать весь набор результатов до того, как он начнет возвращать данные (есть, конечно, случаи, когда Oracle должен материализовать набор результатов, чтобы отсортировать его, прежде чем он сможет начать возвращать данные). Предполагая, что ваш запрос не требует материализации всего набора результатов, Oracle начнет возвращать данные клиентскому процессу, независимо от того, является ли этот клиентский процесс TOAD или SQL*Plus или написанным вами приложением JDBC. Когда клиент запрашивает больше данных, Oracle продолжит выполнение запроса и вернет следующую страницу результатов. Это позволяет TOAD относительно быстро возвращать первые 500 строк, даже если Oracle в конечном итоге потребуется много часов для выполнения всего запроса и возврата последней строки клиенту.
Toad возвращает только первые 500 строк для производительности, но если бы вы выполняли этот запрос через интерфейс Oracle, например, JDBC, он возвращал бы весь результат. Я думаю, что план объяснения показывает вам результаты в том случае, если он не получает подмножество записей; вот как я это использую. У меня нет другого источника, кроме моего собственного опыта.