Jeden programista testuje i porównuje tę samą aplikację, która korzysta z tej samej struktury bazy danych i tych samych danych, tylko w dwóch oddzielnych bazach danych, jednej z Oracle 8 i jednej z Oracle 9.
Aplikacja uruchamia zapytanie bez ORDER BY
klauzuli.
Twierdzi, że zapytanie ORDER-BY-less powinno zwrócić wiersze w tej samej kolejności w obu bazach danych.
Mówię mu, że nie ma gwarancji na to samo zamówienie rzędu, chyba że wyraźnie zastosujesz klauzulę ORDER BY.
Baza danych ma te same indeksy i klucze. Ale plan wyjaśniania pokazuje, że w jednej z baz danych silnik używa klucza jednej z połączonych tabel, podczas gdy w drugiej bazie danych używa innej.
Sugeruje, że dwa środowiska DB nie są sobie równe, ponieważ mają różne statystyki, różne silniki rdbms itp., Ale nie dlatego, że nie udało mi się zreplikować każdego indeksu, który ma oryginalna baza danych.
Mówię mu, że musi wyjaśnić ORDER BY
, czy klauzula jest naprawdę ważna.
Pytanie
Więc mogę go lepiej wytłumaczyć:
W jakiej kolejności zapytanie pobiera wiersze, gdy nie jawnie zawiera klauzulę ORDER BY, i dlaczego to zapytanie nie zwraca wierszy w tej samej kolejności?