Настройте запрос с помощью ROWID и ORA_ROWSCN.

У меня есть следующий запрос, который занимает много времени, так как таблица очень большая, этот запрос также извлекает псевдостолбцы ROWID и ORA_ROWSCN.

select ROWID, ORA_ROWSCN, t.C1, t.c2, t.c5, t.c7, t.c9 from tab t

Я пытался использовать подсказку ALL_ROWS и также запускал статистику, но все равно не очень помогло. Пожалуйста, предложите. Заранее большое спасибо.


person Sid    schedule 18.08.2014    source источник
comment
Ну, у вас нет предложения where, поэтому возвращается вся таблица. Это то, что вы хотите?   -  person OldProgrammer    schedule 18.08.2014
comment
Да, это правда, к сожалению, мне нужны все строки.   -  person Sid    schedule 18.08.2014
comment
Вероятно, невозможно улучшить производительность этого (без распараллеливания), если он просто выполняет полное сканирование таблицы (не могли бы вы добавить план объяснения, пожалуйста?). Вы занимаетесь сменой оборудования. Является ли эта таблица таблицей, организованной по индексу, и выполняете ли вы какой-либо ORDER BY в запросе? Неужели запрос такой простой?   -  person Ben    schedule 18.08.2014
comment
Что вы собираетесь делать со всеми этими строками SCN? Может быть, если вы объясните, чего именно вы пытаетесь достичь, кто-то может указать более разумный способ достижения этого.   -  person Mat    schedule 18.08.2014


Ответы (1)


Rowid и ora_rowscn находятся внутри блока данных.

Ровид состоит из:

  • Номер объекта данных объекта

  • Блок данных в файле данных, в котором находится строка

  • Позиция строки в блоке данных (первая строка равна 0)

  • Файл данных, в котором находится строка (первый файл равен 1). Номер файла относится к табличному пространству.

ora_rowscn дает вам номер последнего изменения для блока, в котором находится строка (не сама строка, имейте в виду).

Ни один из них не вносит значительного вклада в общее время извлечения всех строк из большой таблицы (если только вы не использовали функцию scn_to_timestamp).

проблема здесь в том, что у вас нет предложения WHERE, и требуется много времени, чтобы получить все строки из большой таблицы. Если вам действительно нужны все строки, нет ли какого-либо столбца, который вы могли бы использовать для разделения запроса на множество более мелких запросов, чтобы вы могли начать получать результаты быстрее, возможно, даже парализовать весь процесс (столбец даты или столбец идентификатора). вы могли бы использовать мод на предложение where, что-то в этом роде)?

person Daniel Stolf    schedule 18.08.2014
comment
Вы можете получить SCN для каждой строки в таблице, созданной с параметром ROWDEPENDENCIES. (Все же не точный SCN фиксации, хотя, насколько я знаю.) - person Mat; 18.08.2014