Lists: | pgsql-fr-generale |
---|
From: | Stephane Bortzmeyer <bortzmeyer(at)nic(dot)fr> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Index avec mes propres types ? |
Date: | 2008-09-04 12:29:55 |
Message-ID: | 20080904122955.GA15201@nic.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
[C'est une question qui est, pour l'instant, essentiellement de
curiosité. Mais j'aurais peut-être à utiliser ça un jour.]
Si je crée mes propres types
<http://www.postgresql.org/docs/8.3/interactive/xtypes.html>, puis-je
encore utiliser des index ?
Si je prends l'exemple de la documentation, des nombres complexes, que
je mets dans une colonne x, est-ce que :
SELECT * FROM Test WHERE x = (1, 0)
pourra t-elle utiliser un index ou bien faudra t-il examiner tous les
nombres ?
Plus fort, si que je crée des fonctions real() et imaginary() me
permettant d'accéder aux parties réelles et imaginaires de ces
nombres, une requête comme :
SELECT * FROM Test WHERE real(x) = 0
pourra t-elle utiliser un index sur les parties réelles ou bien faudra
t-il examiner tous les nombres ?
From: | Dimitri Fontaine <dfontaine(at)hi-media(dot)com> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Cc: | Stephane Bortzmeyer <bortzmeyer(at)nic(dot)fr> |
Subject: | Re: Index avec mes propres types ? |
Date: | 2008-09-04 13:12:26 |
Message-ID: | 200809041512.29037.dfontaine@hi-media.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
Bonjour,
Le jeudi 04 septembre 2008, Stephane Bortzmeyer a écrit :
> [C'est une question qui est, pour l'instant, essentiellement de
> curiosité. Mais j'aurais peut-être à utiliser ça un jour.]
>
> Si je crée mes propres types
> <http://www.postgresql.org/docs/8.3/interactive/xtypes.html>, puis-je
> encore utiliser des index ?
C'est possible, via les OPERATOR CLASS. Tu dis à PostgreSQL quels opérateurs
vont avec ton type (opérateurs maison ou non, symboles habituels ou pas) et
lesquels ton index doit utiliser (la Strategy, pour = < > et autres dans
btree par exemple).
http://www.postgresql.org/docs/8.3/static/xindex.html
http://www.postgresql.org/docs/8.3/static/sql-createopclass.html
> Si je prends l'exemple de la documentation, des nombres complexes, que
> je mets dans une colonne x, est-ce que :
>
> SELECT * FROM Test WHERE x = (1, 0)
>
> pourra t-elle utiliser un index ou bien faudra t-il examiner tous les
> nombres ?
Utilisation d'index spécifique possible, pour un BTree il suffit de fournir
les opérateurs <= < = > >=, pour GiST et GIN il faut coder quelques fonctions
d'interface.
> Plus fort, si que je crée des fonctions real() et imaginary() me
> permettant d'accéder aux parties réelles et imaginaires de ces
> nombres, une requête comme :
>
> SELECT * FROM Test WHERE real(x) = 0
>
> pourra t-elle utiliser un index sur les parties réelles ou bien faudra
> t-il examiner tous les nombres ?
J'imagine que tu peux même créer un index fonctionnel dans ce cas, non ?
Pour un exemple que j'espère complet et détaillé, voir prefix :)
http://prefix.projects.postgresql.org/
http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/prefix/prefix/
http://pgsql.tapoueh.org/site/html/prefix/index.html
http://pgsql.tapoueh.org/site/html/news/pgloader-prefix.pdf
Cordialement,
--
dim
From: | Stephane Bortzmeyer <bortzmeyer(at)nic(dot)fr> |
---|---|
To: | Dimitri Fontaine <dfontaine(at)hi-media(dot)com> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Index avec mes propres types ? |
Date: | 2008-09-05 06:54:57 |
Message-ID: | 20080905065457.GB3860@nic.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-fr-generale |
On Thu, Sep 04, 2008 at 03:12:26PM +0200,
Dimitri Fontaine <dfontaine(at)hi-media(dot)com> wrote
a message of 74 lines which said:
> C'est possible, via les OPERATOR CLASS. Tu dis à PostgreSQL quels opérateurs
> vont avec ton type (opérateurs maison ou non, symboles habituels ou pas) et
> lesquels ton index doit utiliser (la Strategy, pour = < > et autres dans
> btree par exemple).
> http://www.postgresql.org/docs/8.3/static/xindex.html
> http://www.postgresql.org/docs/8.3/static/sql-createopclass.html
Parfait. C'est juste la doc que je voulais (et que j'avais raté), merci.