Vous n'êtes pas identifié(e).
Pages : 1
bon une autre question ?
explain analyse SELECT subscriberid, listid FROM email_list_subscribers WHERE listid IN (2) AND emailaddress ILIKE 'email@server.fr' AND unsubscribed=0 AND bounced=0;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Index Scan using email_list_subscribers_listid_idx on email_list_subscribers (cost=0.00..28338.91 rows=1 width=8) (actual time=1074.862..1074.862 rows=0 loops=1)
Index Cond: (listid = 2)
Filter: (((emailaddress)::text ~~* 'email@server.fr'::text) AND (unsubscribed = 0) AND (bounced = 0))
Total runtime: 1074.8
comme indiqué ci-dessus on voie qu'il passe par un idex qui contient que l'id de list
mais pourtant j'ai créé un index
CREATE INDEX opti_2_test ON email_list_subscribers USING btree (listid, lower(emailaddress), bounced, unsubscribed) TABLESPACE "tbs_index" WHERE unsubscribed = 0 AND bounced = 0 ;
alors pourquoi il n'utilise pas cette index???
merci pour vos retours
cdlt
david
Dernière modification par dbigand (22/10/2010 18:21:42)
Hors ligne
Aucune chance d'utiliser l'index puisque vous faites un emailaddress ILIKE 'report4CBD4F2A@mail059.serveurs-jrcg.fr'
Faites lower(emailaddress)= lower('report4CBD4F2A@mail059.serveurs-jrcg.fr'). Ça ça utilisera l'index
Par ailleurs, pas la peine de déclarer :
CREATE INDEX opti_2_test ON email_list_subscribers USING btree (listid, lower(emailaddress), bounced, unsubscribed) TABLESPACE "tbs_index" WHERE unsubscribed = 0 AND bounced = 0 ;
CREATE INDEX opti_2_test ON email_list_subscribers USING btree (listid, lower(emailaddress)) TABLESPACE "tbs_index" WHERE unsubscribed = 0 AND bounced = 0 ;
Suffit, les colonnes de la clause WHERE n'ont pas besoin d'être dans l'index.
Marc.
Hors ligne
Est ce que ça marche avec un like ou c'est pareil il n'utilise pas les index ? Et est ce qu'avec un tsvector ou gin on pourrais faire quelques optimisations ?
Hors ligne
ça marche avec un like, mais si vous n'utilisez pas de % (le caractère joker) je ne vois pas l'intérêt d'utiliser de like.
Un index sur like ne fonctionnera qu'à une condition: que la chaîne à rechercher ne commence pas par %:
like 'toto%' ou like 'to%to' pourront utiliser l'index, pas like '%toto'
Évidemment, like 'toto%' sera plus efficace que like 'to%to'
Un tsvector ne correspond pas à ce que vous voulez faire. La recherche plein texte sert à indexer des articles, les découper en lexemes (mots), etc. Ça n'es pas approprié pour rechercher des chaînes ressemblant à une adresse email.
Marc.
Hors ligne
Pages : 1