Удаление нескольких столбцов - повышение производительности SQL, но - PullRequest
2 голосов
/ 25 марта 2011

У меня длинный SQL здесь (с планом объяснения) . При удалении 5 столбцов из 200 столбцов этот SQL-запрос возвращался за 20 секунд. Но как только эти столбцы добавляются обратно - запрос зависает.

Я заметил, что EXPLAIN PLAN почти такой же, за исключением того, что после добавления обратно - происходит параллелизм (PX COORDINATOR - PX RECEIVE & SEND и т. Д. Находятся в плане объяснения).

Есть предложения?

Я запускаю "ALTER SESSION DISABLE PARALLEL QUERY;" до запуска медленного SQL. И сейчас быстро. Любая идея, как я могу отследить - где параллелизм может произойти, добавив несколько столбцов?

1 Ответ

1 голос
/ 25 марта 2011

Без всех определений таблиц трудно сказать.

Я подозреваю, что вы выполняете удаление таблицы - если таблица на самом деле не нужна для удовлетворения запроса, ее можно игнорировать. Так что если вам на самом деле не нужна колонка от T29, то присоединиться к ней не будет. Требуются различные ограничения, чтобы логически определить, что соединение не требуется.

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

Я бы добавил столбцы обратно, отключил параллельный запрос и посмотрел бы план оттуда. Проверьте предикаты и посмотрите, являются ли правильные оценки для строк / количества элементов правильными.

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