私はPostgres DBを持つRailsアプリケーションを持っています。それは2000万レコードあります。ほとんどのクエリはILIKEを使用します。私は、列の1つにトライアングル・インデックスを作成しました。2000万レコードのデータベースでクエリ実行時間を短縮する方法| Rails、Postgres
triagramインデックスを追加する前に、クエリの実行時間が〜triagramインデックスを作成した後300秒(秒ないMS)
は、クエリの実行時間がダウン〜30代になったために〜200Sました。
どのようにすれば実行時間をミリ秒に短縮できますか?
また、この巨大なデータベースを扱う際の良いプラクティスや提案はありますか?事前に
感謝:)
参考:Faster PostgreSQL Searches with Trigrams
編集:(0.3秒)インデックス・スキャン自体が速いクエリの1
EXPLAIN ANALYZE SELECT COUNT(*) FROM "listings" WHERE (categories ilike '%store%');
QUERY PLAN
--------------------------------------------------------------------------
Aggregate (cost=716850.70..716850.71 rows=1 width=0) (actual time=199354.861..199354.861 rows=1 loops=1)
-> Bitmap Heap Scan on listings (cost=3795.12..715827.76 rows=409177 width=0) (actual time=378.374..199005.008 rows=691941 loops=1)
Recheck Cond: ((categories)::text ~~* '%store%'::text)
Rows Removed by Index Recheck: 7302878
Heap Blocks: exact=33686 lossy=448936
-> Bitmap Index Scan on listings_on_categories_idx (cost=0.00..3692.82 rows=409177 width=0) (actual time=367.931..367.931 rows=692449 loops=1)
Index Cond: ((categories)::text ~~* '%store%'::text)
Planning time: 1.345 ms
Execution time: 199355.260 ms
(9 rows)
"ほとんどのクエリはILIKEを使用している"ので、複数のクエリについて話しています。これらのクエリはどのように見えるのですか?テーブルはどのように見えますか?すでにクエリーの1つで 'explain analyze'を実行しましたか? –
良い専用の外部検索エンジンが役立つかもしれませんが、詳細を伝えるためには、 'EXPLAIN(ANALYZE)'出力を見る必要があります。 –
@LaurenzAlbe 'Explain Analyze'を入力するための質問を編集しました – Mahendhar