Oracle - odczyt posortowanego zbioru z indeksu

0

Cześć. Mam zapytanie do bazy oracle(wersja 11.2), które ma zwrócić posortowany zbiór danych.
Tabela:

CREATE TABLE tabela1 
(
kolumna1   DATE NOT NULL,
kolumna2   VARCHAR2(50 CHAR) NOT NULL,
kolumna3   VARCHAR2(50 CHAR) NOT NULL,
kolumna4   VARCHAR2(50 CHAR) NOT NULL,
....
kolumna10  VARCHAR2(50 CHAR)
)

tabela jest partycjonowana po 'kolumna1' oraz subpartycjonowana po 'kolumna2', posiada indeks lokalny na zestawie kolumn 'kolumna1, kolumna2, kolumna3, kolumna4'

Zapytanie:

SELECT kolumna1, kolumna2, kolumna3, kolumna4
FROM    tabela1
WHERE kolumna1 = &data1
              AND kolumna2 = &wartosc1
ORDER BY kolumna1, kolumna2, kolumna3

Plan zapytania jaki proponuje optymalizator:

screenshot-20200511225200.png

Kwestia której nie rozumiem to co robi w planie zapytania 'sort order by'. Spodziewałem że wystarczy tu odczyt danych z bloków indeksu, bez dodatkowego sortowania. Nie udało mi się też wymusić tego na optymalizatorze.
Będę wdzięczny jeśli ktoś mi to rozjaśni.

0

No ale indeks masz na 'kolumna1, kolumna2, kolumna3, kolumna4' a grupujesz po 'kolumna1, kolumna2, kolumna3' to jak on ma używać indeksu?

0
Tomek Pycia napisał(a):

No ale indeks masz na 'kolumna1, kolumna2, kolumna3, kolumna4' a grupujesz po 'kolumna1, kolumna2, kolumna3' to jak on ma używać indeksu?\

Jeśli byłaby możliwość użycia indeksu do posortowania po kolumnach 'kolumna1, kolumna2, kolumna3, kolumna4' to myślę że tym bardziej można by go użyć do sortowania po 'kolumna1, kolumna2, kolumna3' gdzie kolejność w jakiej zostanie zwrócona 'kolumna4' jest dowolna czyli może zostać zwrócona również jako posortowana.
Rozszerzając zbiór po, którym sortuję do 'kolumna1, kolumna2, kolumna3, kolumna4' plan jest taki sam jak dla 'kolumna1, kolumna2, kolumna3', nic się nie zmieniło

1

Optymalizator w Oracle to jest optymalizator kosztowy oparty o statystyki itp i możliwe ze załadowanie indeks było droższe niz posortowanie. Plan wykonania może się zmieniać względem ilości danych i innych rzeczy i może wydawać się nieracjonalny dla człowieka.

0

Sortowanie występuje ponieważ masz RANGE SCAN. Nie wiem czemu ale przy RANGE SCAN Oracle zawsze sortuje wynik. Przy full scanie już nie potrzebuje dodatkowego sortowania

1 użytkowników online, w tym zalogowanych: 0, gości: 1