sql >> データベース >  >> RDS >> PostgreSQL

クエリ速度の向上:大きなpostgresテーブルでの単純なSELECT

    コメントを答えに抽出する:ここでのインデックス検索は非常に高速でした。すべての時間が実際の行の取得に費やされました。 23秒/7871行=行あたり2.9ミリ秒。これは、ディスクサブシステム全体に分散しているデータを取得するのに適しています。シークは遅いです。 a)データセットをRAMに収める、b)SSDを購入する、またはc)シークを最小限に抑えるために、事前にデータを整理することができます。

    PostgreSQL 9.2には、インデックスのみのスキャンと呼ばれる機能があり、テーブルにアクセスせずに(通常は)クエリに応答できます。これをbtreeと組み合わせることができます このクエリを高速化するために順序を自動的に維持するインデックスプロパティ。あなたはint1に言及します 、int2 、および2つのフロート:

    CREATE INDEX sometable_int1_floats_key ON sometable (int1, float1, float2);
    CREATE INDEX sometable_int2_floats_key ON sometable (int2, float1, float2);
    
    SELECT float1,float2 FROM sometable WHERE int1=<value>; -- uses int1 index
    SELECT float1,float2 FROM sometable WHERE int2=<value>; -- uses int2 index
    

    また、これはディスクシークを魔法のように消去するのではなく、クエリ時間から挿入時間に移動するだけであることに注意してください。また、データを複製しているため、ストレージスペースも必要になります。それでも、これはおそらくあなたが望むトレードオフです。



    1. Oracleに対するJavaのPreparedStatementの質問

    2. SQLServer2000を使用したピボット

    3. jQueryリモートメソッドの使用を検証して、ユーザー名がすでに存在するかどうかを確認します

    4. SQLで数値を最も近い整数に切り上げる方法