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