2016-04-27 7 views
1

私は質問を合理的に効率的にしたいと思っています。これまでの私の研究に基づいて、SQLではインデックスを使用しています。例えばAndroid Sqlite3テーブルでインデックスを正しく使用していますか?

は私が読んでいるものを、インデックスが自動的にプライマリキーフィールド(そう_IDがインデックス化された)とUNIQUEフィールド用に作成されていることから、このテーブル

CREATE TABLE MYTABLE 
    (_ID INTEGER PRIMARY KEY AUTOINCREMENT, 
    NAME_ID INTEGER, 
    SOME_VALUE REAL, 
    TIMESTAMP TEXT) 

を持っていると言うが、時にはに対して複数の値があるかもしれませんa NAME_IDSOME_VALUE、またはTIMESTAMPなので、いずれにもUNIQUEを適用することはできません。

一般的なクエリの1つは、NAME_ID = xdate1 <= TIMESTAMP <= date2 'でこのテーブルの行を選択することです。 NAME_IDTIMESTAMPの両方のインデックスを作成する必要がありますか?

CREATE INDEX MYTABLE_INDEX on MYTABLE (NAME_ID, TIMESTAMP);

か、これはそれについて移動する間違った方法です:または私は複合インデックスを作るのでしょうか?

これらのインデックスを作成すると、基本的に完了していますか?上に示したように、NAME_IDTIMESTAMPの基準に基づいている場合、このテーブルの将来のクエリが効率的になるようにするために必要なすべてを行ったことがありますか?

+0

基本的にはこれです。実際に望みの効果を達成したかどうかを確認するために、インデックスの有無にかかわらずいくつかのサンプルクエリを実際に実行します。 –

+0

フィールドのすべての組み合わせに対してインデックスを作成することをお勧めしますか? 'NAME_ID'のためのもの、' SOME_VALUE'のためのもの、 'TIMESTAMP'のためのもの、' NAME_ID'と 'SOME_VALUE'のためのもの、' NAME_ID'と 'TIMESTAMP'のためのものなど – user6261756

+0

私は言いません。インデックス付きスピードアップクエリでは、挿入/更新/削除速度に悪影響を与えます。私は金色のルールを使用することをお勧めします - あなたがしなければ最適化しないでください。 –

答えて

0

要約すると:

これまでの作業で十分です。

しかし、時期尚早の最適化は長期的にはより多くの問題を引き起こす傾向にあることに注意してください。大きなレコードセットをシミュレートして、すべてのクエリを試してみましょう。結果に満足できない場合は、索引を作成して最適化してください。

インデックスはクエリの処理速度を向上させますが、挿入/更新/削除の速度が遅くなるため、同じテーブルにあまりにも多くを追加するとパフォーマンスが低下することがあります。

関連する問題