Oracle SQL: возможно ли создать таблицу на основе выбора и порядка по столбцу? - PullRequest
1 голос
/ 25 сентября 2019

Я хочу создать таблицу, выбрав некоторые данные из другой таблицы и в то же время упорядочить их на основе одного (или нескольких) столбцов.Я привожу следующий пример, зная, что это неправильно.Можно ли вообще добиться такого формирования таблицы и, если да, есть ли аналогичные операторы SQL, которые могут этого достичь?

CREATE TABLE NEW_TABLE_NAME AS (
SELECT
*
FROM A_RANDOM_TABLE
)
ORDER BY COLUMN_1,COLUMN_2;

Ответы [ 2 ]

3 голосов
/ 25 сентября 2019

Вы всегда должны сортировать свои данные во время запроса. нет гарантии того, что Oracle фактически сохранит данные в порядке их вставки.Даже если вы сделаете что-то вроде этого:

CREATE TABLE NEW_TABLE_NAME AS
  SELECT *
    FROM A_RANDOM_TABLE
   ORDER BY COLUMN_1,COLUMN_2
;

В табличном пространстве ASSM (без «добавления») Oracle будет искать свободный слот в любом месте таблицы.

0 голосов
/ 26 сентября 2019

Порядок физических таблиц можно создавать и поддерживать с помощью Кластеризация атрибутов .

CREATE TABLE NEW_TABLE_NAME
CLUSTERING BY LINEAR ORDER(COLUMN_1, COLUMN_2) AS
SELECT *
FROM A_RANDOM_TABLE
ORDER BY COLUMN_1, COLUMN_2;

Хотя это буквально отвечает на ваш вопрос, вероятно, это не тот ответ, который вы ищете.Кластеризация атрибутов не о предоставлении логического порядка.Как отмечали другие, единственный способ гарантировать сортировку - это использовать в своих запросах предложение ORDER BY.Мы не хотим, чтобы наши таблицы были строго привязаны к физическому формату данных - это вызвало проблемы, которые изначально были мотивацией для создания реляционной модели.

Кластеризация атрибутов помогает обеспечить физический порядок для повышения производительности внесколько случаев - коэффициент кластеризации индекса, материализованные карты зон в Exadata и т. д. Кластеризация атрибутов помогает поддерживать порядок во время MOVE или прямого пути INSERT.Но он не поддерживает порядок для всех операторов DML и, конечно, не гарантирует порядок результатов при чтении из таблицы.

...