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

固定長レコードと固定長フィールドはデータベースのパフォーマンスをどのように向上させますか?

    簡略化された、概念的な、データベース固有ではない説明:

    可能な最大レコード長が事前にわかっている場合、レコードの終わり/次のレコードの始まりを一定時間で見つけることができます。これは、その場所が単純な加算を使用して計算可能であり、配列のインデックス付けと非常によく似ているためです。 intを使用していると想像してください sはレコードへのポインタであり、レコードサイズはどこかで定義された整数定数です。次に、現在のレコードの場所から次の場所に移動するには:

    int current_record = /* whatever */;
    int next_record = current_record + FIXED_RECORD_SIZE;
    

    以上です!

    あるいは、文字列で終了する(または区切られた)レコードとフィールドを使用する場合、次のフィールド/レコードが線形時間スキャンによって検出されることを想像できます。線形時間スキャンでは、区切り文字が見つかるまですべての文字を調べる必要があります。以前と同じように、

    char DELIMITER = ','; // or whatever
    int current_record = /* whatever */;
    int next_record = current_record;
    while(character_at_location(next_record) != DELIMITER) {
        next_record++;
    }
    

    これは実際の実装の単純化されたバージョンまたはナイーブなバージョンである可能性がありますが、一般的な考え方は依然として有効です。一定の時間で同じ操作を簡単に実行することはできず、一定の時間であっても、それほど高速になる可能性は低いです。単一の追加操作を実行します。



    1. 出力を抑制し、コマンドが成功したかどうかを確認するにはどうすればよいですか?

    2. Windowsでshp2pgsql.exeを利用してシェープファイルをPostgreSQL/PostGISデータベースに取り込むPythonスクリプト

    3. クエリ実行時間のpsycopg2ログを取得するにはどうすればよいですか?

    4. 返される列の数が動的である場合にMySQLクエリの列をカウントするにはどうすればよいですか?