Вопрос о стоимости в плане объяснения Oracle - PullRequest
2 голосов
/ 05 апреля 2010

Когда Oracle оценивает «стоимость» для определенных запросов, действительно ли он смотрит на количество данных (строк) в таблице?

Например:

Если я выполняю полное сканирование таблицы сотрудников на предмет имени = 'Боб', оценивает ли она стоимость путем подсчета количества существующих строк или это всегда установленная стоимость?

Ответы [ 2 ]

4 голосов
/ 05 апреля 2010

Оптимизатор затрат использует для оценок статистику сегментов (таблицы и индекса), а также системную статистику (производительность процессора / ввода-вывода). Хотя это зависит от того, как настроена ваша база данных, начиная с 10g статистика сегментов обычно вычисляется один раз в день процессом, вызывающим пакет DBMS_STATS.

3 голосов
/ 06 апреля 2010

В конфигурации по умолчанию Oracle проверит статистику таблицы (которую можно посмотреть, запросив представление ALL_TABLES - см. Столбец NUM_ROWS). Обычно задание Oracle выполняется периодически для повторного сбора этой статистики путем запроса части или всей таблицы.

Если статистика еще не была собрана (пока), оптимизатор (в зависимости от параметра optimizer_dynamic_sampling) выполнит быстрый выборочный запрос к таблице, чтобы рассчитать оценку количества строк в этой таблице.

(Точнее, стоимость сканирования таблицы рассчитывается не по количеству строк, а по количеству блоков в таблице (которое вы можете увидеть в столбце BLOCKS в ALL_TABLES). берет это число и делит его на коэффициент, относящийся к количеству считанных мультиблоков, чтобы вычислить стоимость этой части плана.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...