Received: from maia.hub.org (maia-5.hub.org [200.46.204.29]) by mail.postgresql.org (Postfix) with ESMTP id 739F71337BDF for ; Wed, 16 Mar 2011 13:37:05 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.29]) (amavisd-maia, port 10024) with ESMTP id 43363-04 for ; Wed, 16 Mar 2011 16:36:55 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mh4.mail.rice.edu (mh4.mail.rice.edu [128.42.199.11]) by mail.postgresql.org (Postfix) with ESMTP id B5A3F1337B6E for ; Wed, 16 Mar 2011 13:36:54 -0300 (ADT) Received: from mh4.mail.rice.edu (localhost.localdomain [127.0.0.1]) by mh4.mail.rice.edu (Postfix) with ESMTP id CF58B28FDA3; Wed, 16 Mar 2011 11:36:53 -0500 (CDT) X-Virus-Scanned: by amavis-2.6.4 at mh4.mail.rice.edu, auth channel Received: from mh4.mail.rice.edu ([127.0.0.1]) by mh4.mail.rice.edu (mh4.mail.rice.edu [127.0.0.1]) (amavis, port 10026) with ESMTP id QOr1oyYgIid0; Wed, 16 Mar 2011 11:36:53 -0500 (CDT) X-SMTP-Auth: no X-SMTP-Auth: no Received: from aart.is.rice.edu (aart.is.rice.edu [168.7.56.48]) by mh4.mail.rice.edu (Postfix) with ESMTP id 9EA1828FD78; Wed, 16 Mar 2011 11:36:53 -0500 (CDT) Received: by aart.is.rice.edu (Postfix, from userid 18612) id 7C4972D5A6; Wed, 16 Mar 2011 11:36:53 -0500 (CDT) Date: Wed, 16 Mar 2011 11:36:53 -0500 From: Kenneth Marshall To: Adarsh Sharma Cc: pgsql-performance@postgresql.org Subject: Re: Help with Query Tuning Message-ID: <20110316163653.GF11541@aart.is.rice.edu> References: <4D807F42.7000906@orkash.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4D807F42.7000906@orkash.com> User-Agent: Mutt/1.5.16 (2007-06-09) X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-1.91 tagged_above=-10 required=5 tests=BAYES_00=-1.9, T_RP_MATCHES_RCVD=-0.01 X-Spam-Level: X-Archive-Number: 201103/163 X-Sequence-Number: 42842 On Wed, Mar 16, 2011 at 02:43:38PM +0530, Adarsh Sharma wrote: > Dear all, > > I am facing a problem while creating the index to make the below query run > faster. My table size is near about 1065 MB and 428467 rows. > > explain analyze select count(*) from page_content where publishing_date > like '%2010%' and content_language='en' and content is not null and > isprocessable = 1 and (content like '%Militant%' > OR content like '%jihad%' OR content like '%Mujahid%' OR > content like '%fedayeen%' OR content like '%insurgent%' OR content like > '%terrorist%' OR > content like '%cadre%' OR content like '%civilians%' OR content like > '%police%' OR content like '%defence%' OR content like '%cops%' OR content > like '%crpf%' OR content like '%dsf%' OR content like '%ssb%') AND (content > like '%kill%' or content like '%injure%'); > > *Output: > > * Aggregate (cost=107557.78..107557.79 rows=1 width=0) (actual > time=18564.631..18564.631 rows=1 loops=1) > -> Seq Scan on page_content (cost=0.00..107466.82 rows=36381 width=0) > (actual time=0.146..18529.371 rows=59918 loops=1) > Filter: ((content IS NOT NULL) AND (publishing_date ~~ > '%2010%'::text) AND (content_language = 'en'::bpchar) AND (isprocessable = > 1) AND (((content) > ::text ~~ '%kill%'::text) OR ((content)::text ~~ '%injure%'::text)) AND > (((content)::text ~~ '%Militant%'::text) OR ((content)::text ~~ > '%jihad%'::text) OR ( > (content)::text ~~ '%Mujahid%'::text) OR ((content)::text ~~ > '%fedayeen%'::text) OR ((content)::text ~~ '%insurgent%'::text) OR > ((content)::text ~~ '%terrori > st%'::text) OR ((content)::text ~~ '%cadre%'::text) OR ((content)::text ~~ > '%civilians%'::text) OR ((content)::text ~~ '%police%'::text) OR > ((content)::text > ~~ '%defence%'::text) OR ((content)::text ~~ '%cops%'::text) OR > ((content)::text ~~ '%crpf%'::text) OR ((content)::text ~~ '%dsf%'::text) > OR ((content)::text > ~~ '%ssb%'::text))) > Total runtime: 18564.673 ms > > > *Index on that Table : > > *CREATE INDEX idx_page_id > ON page_content > USING btree > (crawled_page_id); > > *Index I create :* > CREATE INDEX idx_page_id_content > ON page_content > USING btree > (crawled_page_id,content_language,publishing_date,isprocessable); > > *Index that fail to create: > > *CREATE INDEX idx_page_id_content1 > ON page_content > USING btree > (crawled_page_id,content); > > Error :-ERROR: index row requires 13240 bytes, maximum size is 8191 > ********** Error ********** > > ERROR: index row requires 13240 bytes, maximum size is 8191 > SQL state: 54000 > > How to resolve this error > Please give any suggestion to tune the query. > > Thanks & best Regards, > > Adarsh Sharma > You should probably be looking at using full-text indexing: http://www.postgresql.org/docs/9.0/static/textsearch.html or limit the size of content for the index. Cheers, Ken