On 07/13/2010 04:48 AM, Elias Ghanem wrote: > Hi, > I have table "ARTICLE" containing a String a field "STATUS" that > represents a number in binary format (for ex: 10011101). > My application issues queries with where conditions that uses BITAND > operator on this field (for ex: select * from article where status & 4 = > 4). > Thus i'm facing performance problemes with these select queries: the > queries are too slow. > Since i'm using the BITAND operator in my conditions, creating an index > on the status filed is useless > and since the second operator variable (status & 4 = 4; status & 8 = 8; > status & 16 = 16...) a functional index is also usless (because a > functional index require the use of a function that accept only table > column as input parameter: constants are not accepted). > So is there a way to enhance the performance of these queries? You haven't given a lot of info to help us help you, but would something along these lines be useful to you? drop table if exists testbit; create table testbit( id serial primary key, article text, status int ); insert into testbit (article, status) select 'article ' || generate_series::text, generate_series % 256 from generate_series(1,1000000); create index idx1 on testbit(article) where status & 1 = 1; create index idx2 on testbit(article) where status & 2 = 2; create index idx4 on testbit(article) where status & 4 = 4; create index idx8 on testbit(article) where status & 8 = 8; create index idx16 on testbit(article) where status & 16 = 16; create index idx32 on testbit(article) where status & 512 = 512; update testbit set status = status + 512 where id in (42, 4242, 424242); explain analyze select * from testbit where status & 512 = 512; QUERY PLAN ------------------------------------------------------------------ Index Scan using idx32 on testbit (cost=0.00..4712.62 rows=5000 width=22) (actual time=0.080..0.085 rows=3 loops=1) Total runtime: 0.170 ms HTH, Joe -- Joe Conway credativ LLC: http://www.credativ.us Linux, PostgreSQL, and general Open Source Training, Service, Consulting, & Support
Attachment:
signature.asc
Description: OpenPGP digital signature