Database Case Insensitive: aggiornamenti

venerdì 11 maggio 2007 alle 11:00 | Pubblicato su Installation and Configuration, Performance Tuning, SQL | 1 commento

In seguito ad dei test scaturiti da un thread di discussione sul newsgroup comp.databases.oracle.server sono costretto a scrivere un post di aggiornamento di un vecchio post di dicembre.

Stamane ho verificato che in 10gR2 (10.2.0.2) la ricerca case insensitive funziona, ma non è in grado di usare gli indici, se li usa fa dei “INDEX FULL SCAN”, cioè non li usa come indici veri e propri. A dire il vero quello che non ho capito è perchè non funzioni neanche se uso un indice funzionale (create index idx on tablex (upper(field));).

Questo quindi mi porta ad essere più diffidente riguardo a questa implementazione delle ricerche “case insensitive” sul database.

P.S. Durante i miei test ho incontrato uno strano errore:
SQL> alter Session set nls_comp=linguistic;

Modificata sessione.

SQL> alter Session set nls_sort=binary_ci;

Modificata sessione.

SQL> exec dbms_stats.gather_table_stats(OWNNAME=>’GEOCALL’, –
tabname=>’AUTENTI’,CASCADE=>TRUE);
BEGIN dbms_stats.gather_table_stats(OWNNAME=>’GEOCALL’,
tabname=>’AUTENTI’,CASCADE=>TRUE); END;

*
ERRORE alla riga 1:
ORA-00979: non +¿ un’espressione GROUP BY
ORA-06512: a “SYS.DBMS_STATS”, line 13159
ORA-06512: a “SYS.DBMS_STATS”, line 13179
ORA-06512: a line 1

P.P.S.

La conclusione del discorso è che su una applicazione già esistente si riesce ad ottenere che le ricerche sulle stringhe siano “case insensitive” senza dover modificare l’applicazione, modificando le impostazioni del database (se 10gR2). Si tratta di un compromesso, perchè come visto le ricerche con il like non sono in grado di sfruttare gli indici e ciò potrebbe dare problemi di prestazioni. Se non si vogliono problemi allora l’unica soluzione seria è quella di usare Oracle Text, che è una delle caratteristiche delle Standard Edition, quindi è gratis.

P.P.P.S. (18-05-2007)

Alla fine della sezione “Using Linguistic Indexes” del manuale Oracle® Database Globalization Support Guide
10g Release 2 (10.2)
Part Number B14225-02

Si trova la nota:

Note:

The SQL functions MAX( ) and MIN( ), and also the LIKE operator, cannot use linguistic indexes when NLS_COMP is set to LINGUISTIC.

1 commento »

RSS feed for comments on this post. TrackBack URI

  1. […] fa ho affrontato il tema delle ricerche “case insensitive” in oracle (qui e qui) , ovvero le ricerche su stringhe senza distinzione tra maiuscole e minuscole. Come ebbi modo […]


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Blog su WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: