idx_scan在PostgreSQL统计中非常低

时间:2017-07-07 08:46:53

标签: postgresql optimization indexing

我想在PostgresSQL优化中寻求帮助。

我有一个中等大小的表(大约2.000.000条记录),我写了一个非常简单的查询,如:

Aggregate  (cost=396247.61..396247.62 rows=1 width=17)

  ->  Hash Join  (cost=99668.54..396152.13 rows=38195 width=17)

        Hash Cond: ((fp.session_id)::text = (sd.session_id)::text)

        ->  Seq Scan on fp  (cost=0.00..293450.55 rows=706957 width=45)

              Filter: ((license_key)::text = 'license'::text)

        ->  Hash  (cost=98678.10..98678.10 rows=79235 width=28)

              ->  Bitmap Heap Scan on sd  (cost=2902.50..98678.10 rows=79235 width=28)

                    Recheck Cond: ((device_hash)::text = 'hash'::text)

                    ->  Bitmap Index Scan on "sd.device_hash_btree_idx"  (cost=0.00..2882.69 rows=79235 width=0)

                          Index Cond: ((device_hash)::text = 'hash'::text)

我在' license_key',' user_id'上有简单的索引。和' device_hash' (3个指标) 执行程序不想使用我的license_key索引,因为表中有超过700.000个匹配项,而Seq Scan是更好的选择。

select * from where indexrelname= 'fp_license_key_btree_idx'

relid   |   indexrelname    |   idx_scan   |   idx_tup_read    |   idx_fetch
----------------------------------------------------------------------------
16430   |fp.license_key_btree_idx | 451    |    13641445       |    13641445

我检查了我的统计数据:

std::memcpy
你能给我建议吗?我如何改进我的idx_scan?谢谢

1 个答案:

答案 0 :(得分:0)

您可以尝试使用CTE和新索引:

<script>
  <%= render 'style_factory.js.erb' %>
</script>