Oracle SQL возвращает строки произвольным образом, если не используется предложение «упорядочить по»

Может быть, кто-нибудь сможет мне это объяснить, но при запросе таблицы данных из Oracle, где несколько записей существуют для ключа (скажем, идентификатора клиента), запись, которая появляется первой для этого клиента, может изменяться, если нет неявного оператора «порядок по», обеспечивающего выполнение заказа, скажем, с помощью альтернативного поля, такого как тип транзакции. Таким образом, выполнение одного и того же запроса в той же таблице может привести к другому порядку записей, чем 10 минут назад.

Например, один запуск может дать:

Cust_ID, Transaction_Type
запись, которая появляется первой для этого покупателя, может изменяться, если не существует неявного оператора «порядок по», обеспечивающего выполнение порядка, скажем, с помощью альтернативного поля, например типа транзакции. Таким образом, выполнение одного и того же запроса в той же таблице может привести к другому порядку записей, чем 10 минут назад.

Например, один запуск может дать:

Cust_ID, Transaction_Type
запись, которая появляется первой для этого покупателя, может изменяться, если не существует неявного оператора «порядок по», обеспечивающего выполнение порядка, скажем, с помощью альтернативного поля, например типа транзакции. Таким образом, выполнение одного и того же запроса в той же таблице может привести к другому порядку записей, чем 10 минут назад.

Например, один запуск может дать:

Cust_ID, Transaction_Type
123 A
123 B

Если не используется предложение «order by Transaction_Type», Oracle может произвольно вернуть следующий результат при следующем запуске запроса:

Cust_ID, Transaction_Type
123 B
123 A

Полагаю, у меня сложилось впечатление, что в базе данных Oracle был установлен порядок строк по умолчанию, который (возможно) отражал физический порядок на диске. Другими словами, произвольный порядок, который является неизменным и гарантирует тот же результат при повторном запуске запроса.

Имеет ли это отношение к оптимизатору и как он решает, где наиболее эффективно получить данные?

Конечно, Лучшая практика с точки зрения программирования - это принудительное упорядочивание, которое требуется, меня это поведение немного расстроило.

8
задан Community 12 March 2019 в 23:53
поделиться