Re: View not using index
От | Igor Neyman |
---|---|
Тема | Re: View not using index |
Дата | |
Msg-id | A76B25F2823E954C9E45E32FA49D70ECCD515FDC@mail.corp.perceptron.com обсуждение исходный текст |
Ответ на | View not using index (gmb <gmbouwer@gmail.com>) |
Список | pgsql-sql |
CREATE TABLE detail ( invno VARCHAR, accno INTEGER, info INTEGER[] ); CREATE OR REPLACE VIEW detailview AS ( SELECT invno , accno , COALESCE( info[1],0 ) info1, COALESCE( info[2],0 ) info2, COALESCE( info[3],0 ) info3, COALESCE(info[4],0 ) info4 FROM detail ); CREATE INDEX detail_ix_info3 ON detail ( ( info[3] ) ) WHERE COALESCE( info[3],0 ) = 1; EXPLAIN SELECT * FROM detail WHERE COALESCE( info[3],0 ) =1; QUERY PLAN ------------------------------------------------------------------------------Bitmap Heap Scan on detail (cost=4.13..12.59rows=4 width=68) Recheck Cond: (COALESCE(info[3], 0) = 1) -> Bitmap Index Scan on detail_ix_info3 (cost=0.00..4.13rows=4 width=0) (3 rows) EXPLAIN SELECT * FROM detailview WHERE COALESCE( info3,0 ) =1; QUERY PLAN --------------------------------------------------------Seq Scan on detail (cost=0.00..20.38 rows=4 width=68) Filter: (COALESCE(COALESCE(info[3],0), 0) = 1) (2 rows) This is an oversimplified example; the view in our production env provides for 20 elements in the info array column. My tablein productions env contains ~10mil rows. Is there any way in which I can force the view to use the index? _______________________ Why are you applying "extra" COALESCE when querying the view? Why not just: SELECT * FROM detailview WHERE infor3 = 1; ? Regards, Igor Neyman
В списке pgsql-sql по дате отправления: