Postgresql性能不是基本索引

时间:2015-08-11 10:47:52

标签: ruby-on-rails ruby postgresql

我有足够的(每天10 blns)记录是具有以下结构的DB:

class CreateRecords < ActiveRecord::Migration
  def change
    create_table :records, id: false do |t|

      t.column :client_ip, :inet
      t.integer :client_port

      t.column  :destination_ip, :inet
      t.integer :destination_port

      t.datetime :session_start
      t.datetime :session_end

      t.integer :bytes_sent
      t.integer :bytes_received

      t.string  :url
      t.string  :domain

    end
    add_index :records, :client_ip
    add_index :records, :destination_ip
    add_index :records, :domain
  end
end

我这里有基本索引,但我想进一步提高性能。特别是我对非常基本的查询(没有连接或类似的东西)感兴趣:

Record.where(client_ip: ip)
Record.where('domain like ?', "%#{domain}%")

接下来我应该实施什么样的解决方案?任何并行进程,特殊索引,postgresql配置以外的默认进程?

Rails中是否存在使用Postgres分区的原生方式?

1 个答案:

答案 0 :(得分:1)

对于LIKE部分,您可以尝试使用trigram索引:

CREATE EXTENSION pg_trgm;
CREATE INDEX idx_whatever ON tab USING gist(domain gist_trgm_ops);

它应该加速ip正则表达式和LIKE。 这样做需要PostgreSQL contrib包。