轻量级实现:HypoPG
使用方法
rjuju=# CREATE TABLE hypo AS SELECT id, 'line ' || id AS val FROM generate_series(1,10000) id;rjuju=# EXPLAIN SELECT * FROM hypo WHERE id = 1;QUERY PLAN-------------------------------------------------------Seq Scan on hypo (cost=0.00..180.00 rows=1 width=13)Filter: (id = 1)(2 rows)
rjuju=# SELECT * FROM hypopg_create_index('CREATE INDEX ON hypo (id)');
rjuju=# SELECT * FROM hypopg_list_indexes ;indexrelid | indexname | nspname | relname | amname-----------+-------------------------------------------+---------+---------+--------205101 | <41072>btree_hypo_id | public | hypo | btree
rjuju=# EXPLAIN SELECT * FROM hypo WHERE id = 1;QUERY PLAN------------------------------------------------------------------------------------Index Scan using <41072>hypo_btree_hypo_id on hypo (cost=0.29..8.30 rows=1 width=13)Index Cond: (id = 1)(2 rows)
rjuju=# EXPLAIN ANALYZE SELECT * FROM hypo WHERE id = 1;QUERY PLAN-------------------------------------------------------------------------------------------------Seq Scan on hypo (cost=0.00..180.00 rows=1 width=13) (actual time=0.036..6.072 rows=1 loops=1)Filter: (id = 1)Rows Removed by Filter: 9999Planning time: 0.109 msExecution time: 6.113 ms(5 rows)
rjuju=# CREATE INDEX ON hypo(id);rjuju=# CREATE INDEX ON hypo(id, val);rjuju=# EXPLAIN SELECT * FROM hypo WHERE id = 1;QUERY PLAN----------------------------------------------------------------------------------Index Only Scan using hypo_id_val_idx on hypo (cost=0.29..8.30 rows=1 width=13)Index Cond: (id = 1)(2 rows)
rjuju=# SELECT hypopg_hide_index('hypo_id_val_idx'::REGCLASS);rjuju=# EXPLAIN SELECT * FROM hypo WHERE id = 1;QUERY PLAN-------------------------------------------------------------------------Index Scan using hypo_id_idx on hypo (cost=0.29..8.30 rows=1 width=13)Index Cond: (id = 1)(2 rows)
rjuju=# SELECT hypopg_hide_index('hypo_id_idx'::REGCLASS);rjuju=# EXPLAIN SELECT * FROM hypo WHERE id = 1;QUERY PLAN-------------------------------------------------------Seq Scan on hypo (cost=0.00..180.00 rows=1 width=13)Filter: (id = 1)(2 rows)
rjuju=# SELECT hypopg_unhide_index('hypo_id_idx'::regclass);rjuju=# EXPLAIN SELECT * FROM hypo WHERE id = 1;QUERY PLAN-------------------------------------------------------------------------Index Scan using hypo_id_idx on hypo (cost=0.29..8.30 rows=1 width=13)Index Cond: (id = 1)(2 rows)
rjuju=# SELECT * FROM hypopg_hidden_indexes();indexid---------52660452660312659(3 rows)
rjuju=# SELECT * FROM hypopg_hidden_indexes;indexrelid | index_name | schema_name | table_name | am_name | is_hypo------------+----------------------+-------------+------------+---------+---------12659 | <12659>btree_hypo_id | public | hypo | btree | t526603 | hypo_id_idx | public | hypo | btree | f526604 | hypo_id_val_idx | public | hypo | btree | f(3 rows)
参考
文章转载自yanzongshuaiDBA,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




