2012-12-31 10 views
8

Czy wystąpi różnica w wydajności, gdy korzystam z indeksu, aby uzyskać dane w porównaniu do nazwy kolumny i mówię o wykonywaniu tej operacji miliony razy dziennie na serwerze.Porównanie wydajności danych wyodrębniających zestaw wyników przy użyciu indeksu względem nazwy kolumny

rs.getString(1) vs rs.getString("columnname");

EDIT: wersja sterownika JDBC Oracle JDBC 10.2.0.4.0

+0

Czy to zależy od dokładnej wersji sterownika JDBC? Prawdopodobnie będziesz musiał stworzyć własny test porównawczy. – maerics

+3

Myślę, że nazwa kolumny będzie miała niewielki (nieistotny) narzut na indeks obliczeniowy, interesujące pytanie. Zobaczmy, z kim eksperci. – kosa

+1

Próbuję wyobrazić sobie sterownik bazy danych, w którym koszt wyszukiwania kolumny według nazwy lub odwrotnie, może zbliżyć się do kosztu pobrania danych z bazy danych. Czy to dlatego, że zaprojektowali bazę danych niewiarygodnie dobrze, czy kierowca jest niesamowicie kiepski? – ruakh

Odpowiedz

10

rs.getString(n); wykona nieco szybciej, bo to pobieranie bezpośrednio z kolekcji, zamiast poszukiwania.

Setki przyszłych czytelników kodu z pewnością docenią numer rs.getString("columnname");, zamiast szukać kodu SQL, aby sprawdzić, do czego odnosi się indeks n.

4

To naprawdę nie ma znaczenia. Uderzenie w bazę danych będzie wiele razy wolniejsze niż uzyskanie dostępu do wartości kolumny.

rs.getString(n) będzie nieznacznie szybszy. Jednak zależy to od implementacji sterownika i liczby kolumn w wyniku. Większość implementacji prawdopodobnie użyje nazwy HashMap do odwzorowania nazw kolumn na indeks, ale niekoniecznie. Ponadto niektóre sterowniki mogą budować LashMap leniwie, co oznacza, że ​​pierwszy wiersz będzie najwolniejszy w dostępie po nazwie kolumny. JTDS, na przykład, wykonuje liniowe wyszukiwanie kolumn jeszcze nie w swojej HashMap.

EDYCJA: drobne zmiany i uporządkowane. Brak zmian treści.

Powiązane problemy