Używamy hibernacji z Oracle (11) i mamy poważne problemy z wydajnością ze względu na użycie "ilike", bez względu na wielkość liter "jak".jak przyspieszyć kryteria hibernacji "ilike zapytania" z bazą danych oracle
Java/hibernacji kod wygląda następująco:
c1.add(Restrictions.ilike("address", address));
co skutkuje sql jak
select * from ACCOUNT where lower(ADDRESS_1) = ?
Funkcja „niższe” uniemożliwia wyrocznią w użyciu indeks co skutkuje pełne skanowanie tabeli.
Zastanawiam się nad wprowadzeniem nowej kolumny do tabeli db, która zawiera małą literę adresu. Mógłbym wtedy użyć:
c1.add(Restrictions.ilike("addressLCase", address.toLowerCase()));
... ale ja naprawdę nie podoba mi się pomysł, aby zapisać zawartość dwukrotnie ...
Wtedy pomyślałem tworzenia indeksu z małymi literami
CREATE INDEX ADDRESS_1_IDX ON ACCOUNT lower( ADDRESS_1 ) ;
ale to nie działa, ponieważ nie mogę przekonać optymalizator używać tego indeksu ...
Więc co można zrobić, aby stworzyć szybki zapytanie kryteria hibernacji API i 'lubię' ?