Почему мой запрос count (*) истекает, а встроенное представление, чьи записи он считает, - нет? - PullRequest
2 голосов
/ 11 мая 2010

Не могу понять это ... когда я выполняю запрос выбора, он показывает стоимость плана объяснения ~ 4500 и занимает ~ 3 секунды, чтобы вернуться. Когда я заключаю этот запрос (без изменений) внутри:

select count(*) from (
 /*query here*/
)

Время истекло. Это через 5 минут и считается сейчас.

Я пробовал это в SQL Developer и Aqua Data Studio - те же результаты.

Ответы [ 6 ]

4 голосов
/ 11 мая 2010

При выполнении COUNT(*) оптимизатор меняет свою цель на ALL_ROWS, что может серьезно повлиять на план.

Не могли бы вы опубликовать свой запрос здесь?

1 голос
/ 11 мая 2010

Возможно, оптимизатор не «знает», как на самом деле выглядят ваши таблицы.

Попробуйте проанализировать таблицы, которые используются в запросе:

EXEC dbms_stats.gather_table_stats(
    ownname => <owner-name>,
    tabname => <table-name>,
    cascade => TRUE );
0 голосов
/ 11 мая 2010

Если вы пытаетесь сделать что-то вроде этого:

ВЫБЕРИТЕ СЧЕТЧИК (*)
ОТ (ВЫБРАТЬ ... ОТ ...);

Затем вы должны попытаться указать, на какое поле вы хотите рассчитывать, например:

ВЫБЕРИТЕ СЧЕТ (myfield)
ОТ (ВЫБЕРИТЕ, что угодно, что угодно, что угодно, ОТ МИТАБИЛА);

Это то, что вы имеете в виду?

0 голосов
/ 11 мая 2010

Вы хотите использовать определенный выбор для вашего count запроса, оптимизированный не знает, на какие таблицы он будет рассчитывать.

Кроме того, не используйте count(*), так как он будет учитываться во всех столбцах, просто используйте count(COLUMN_NAME)

0 голосов
/ 11 мая 2010

Операция COUNT(*) подсчитывает все строки, переданные ей веткой плана выполнения под ней. Это означает, что оптимизатор ожидает возврата ALL_ROWS, прежде чем завершить его выполнение, что может серьезно повлиять на план запроса.

0 голосов
/ 11 мая 2010

Невозможно определить, не увидев весь ваш запрос, но для начала я бы попробовал посмотреть на вывод объяснение плана .

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