我有足够的(每天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分区的原生方式?
答案 0 :(得分:1)
对于LIKE部分,您可以尝试使用trigram索引:
CREATE EXTENSION pg_trgm;
CREATE INDEX idx_whatever ON tab USING gist(domain gist_trgm_ops);
它应该加速ip正则表达式和LIKE。 这样做需要PostgreSQL contrib包。