On Thu, 16 Nov 2000, Gilbert ROBERT wrote:

> La version de postgres est la 7.0 sur une Ultra 5 sous solaris 2.6.
> 
> > > J'ai bien essayé de faire des index sur la colonne id p.e mais le temps
> > > de réponse est toujours aussi long!
> > Ainsi:
> >    CREATE INDEX sol_f_id_idx ON sol_f(id);  # ceci prend du temps.
> 
> c'est exactement comme cela.
> 
> > Donc l'index semble avoir un effet, du moins pour ma configuration.
> 
> Mais pas dans mon cas! ou alors j'ai fais qqchose de faux. 
> Dans l'autre index ou il n'y a que 130752 c'est quasi instantané.
> 
> > hum, id étant un integer me semble-t-il, j'aurais fait
> >   WHERE id = 130751;
> C'est juste je me suis planté dans mon cut&paste

J'ai un peu loupé l'histoire qui c'est passé, mais je tenais à préciser
un truc. Si tu met dans ta clause WHERE id LIKE '130751'; une base de
donnée effectuant la recherche va faire une espèce de type casting pour
chaque tuple de la table. Il est impératif d'utiliser un opérateur
mathématique et un nombre pour ton test. Soit:

        id = 130751;

et rien d'autre. A partir du moment ou tu met ton chiffre entre
guillemets, c'est une chaîne de caractère!

n.b. Si tu met un indexe sur un champ contenant une chaîne de caractère
justement et que tu utilises un like, il faut t'assurer que tu n'utilises
pas de wild card au début de ton critère de recherche. Sans quoi ton
indexe n'est d'office pas utilisé. Par un exemple:

        WHERE id LIKE '%urfeurFou%';  --> TRES MAUVAIS
        WHERE id LIKE 'SurfeurFou%' OR
              id LIKE 'surfeurFou%':  --> BEAUCOUP MIEUX

Essaie ça, si tu ne l'as pas déjà fait!
 
> Je viens de faire un
> EXPLAIN  SELECT * FROM main_index_f WHERE id='130751';
> Index Scan using main_index_f_pkey on main_index_f  (cost=0.00..8.14 rows=10 
>width=40)
> 
> et puis un 
> 
> EXPLAIN  SELECT * FROM sol_f WHERE id='130751';
> Seq Scan on sol_f  (cost=0.00..77604.64 rows=39087 width=24)
> 
> Donc la clairement j'en deduis qu'il n'utilise pas mon index!
> et pourtant j'en ai bien fait un
> 
> sylex2000=>  CREATE INDEX sol_f_id_idx ON sol_f (id);
> CREATE
> 
> sylex2000=> \di
>          List of relations
>        Name        | Type  | Owner  
> -------------------+-------+--------
>  main_index_d_pkey | index | robert
>  main_index_f_pkey | index | robert
>  main_index_i_pkey | index | robert
>  sol_f_id_idx      | index | robert
> (4 rows)
> 
> J'avoue ne pas bien comprendre comment il détermine l'index (c'est semble-t-il 
>indépendant du nom
> "Although you can use any name for the index, it is good practice to use the table 
>and column names as part of the index name...") et comment le forcer à l'utiliser. Ou 
>alors il y a autre chose!
> 
> 
> G.
> -- 
>                                |  UnixOnNous et Rejoignez le
> Gilbert ROBERT                 | "Groupe des Utilisateurs Lémaniques de"
> ISSCO, University of Geneva    |     / /    (_)____   __  __ _  __  
> 40 bd pont d'arve              |    / /    / // __ \ / / / /| |/_/ 
> CH-1211 GENEVA 4               |   / /___ / // / / // /_/ /_>  <
> Tel: +41/22/705 8686           |  /_____//_//_/ /_//_____/ /_/\_\
> http://www.gilbert-robert.com  |      http://www.linux-gull.ch
> --
> http://www-internal.alphanet.ch/linux-leman/ avant de poser
> une question.
> 

                      \\\___///
                     \\  - -  //
                      (  @ @  )
+-------------------oOOo-(_)-oOOo------------------------------+
| Cedric Bapst            |      Home: +41(0)21 807 2530       |
| Le Clos C               |      Work: +41(0)21 631 8150       |
| CH-1174 Montherod       |      Fax : +41(0)21 631 8480       |
+-------------------------+-Oooo-------------------------------+
                     oooO   (   )
                    (   )    ) /
                     \ (    (_/
                      \_)

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question.

Répondre à