I working with a table of about 70'000 records and I made 2 tests about
the optimisation of ~* :
With ~* :
----------
% time -p psql mayer98 -c "select * from artistes where nom ~* 'picasso';"
ref|nom |nom_court |type|nationalite
-----+----------------------------+-------------+----+-----------
76160|PICASSO Pablo, 1881-1973 |PICASSO | 0|E
76161|PICASSO Loulou, *1958 |PICASSOLoulou| 0|F
76162|(A) PICASSO Pablo, 1881-1973|PICASSOPablo | 6|E
(3 rows)
real 11.52 *
user 0.02
sys 0.01
With upper(...) and like upper(%...%)
--------------------------------------
% time -p psql mayer98 -c "select * from artistes where upper(nom) like
upper('%PICASSO%');"
ref|nom |nom_court |type|nationalite
-----+----------------------------+-------------+----+-----------
76160|PICASSO Pablo, 1881-1973 |PICASSO | 0|E
76161|PICASSO Loulou, *1958 |PICASSOLoulou| 0|F
76162|(A) PICASSO Pablo, 1881-1973|PICASSOPablo | 6|E
(3 rows)
real 4.44 *
user 0.03
sys 0.00
Relsult: it seem to be 2.6 time more optimised to use upper(...) like
upper('%...%') ???
JK
Herouth Maoz wrote:
> At 16:14 +0200 on 16/9/98, Sferacarta Software wrote:
>
> > regular expression operators ^ stand for first character and $ stand
> > for last character:
> >
> > ~* '^india$'
> >
> > matches India
> > india
> > INDIA
> >
> > but not Indiana
> > New India
>
> Another way to think of it is like this:
>
> 'india' is eqivalent to "contains 'india'"
> '^india' is eqivalent to "starts with 'india'"
> 'india$' is eqivalent to "ends with 'india'"
> '^india$' is eqivalent to "is exactly 'india'"
>
> Herouth
>
> --
> Herouth Maoz, Internet developer.
> Open University of Israel - Telem project
> http://telem.openu.ac.il/~herutma