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

MySQLインデックスの効率を改善する-複数のインデックスの列?

    この種のものが何度も見られるので、簡単なメモ:prism_worldsのJOIN (おそらく)そのテーブルのデータは必要ないため、は不要です。あなたは基本的にデータベースに「名前が「何か」に等しい世界のすべての名前を教えてください」と尋ねています。代わりにスカラーサブクエリを使用してください。

    prism_worlds.worldに一意のインデックスを作成します

    のようなクエリを実行します
    SELECT *
    FROM prism_data 
    WHERE prism_data.world_id = (SELECT w.world_id FROM prism_worlds AS w WHERE w.world = 'DeuxTiersMondes')
    LIMIT 1000;
    

    オプティマイザーは、prism_data.world_idを把握します。 単一の定数値に制約されます。 MySQLは事前にクエリを実行してこの値を把握し、クエリ全体で使用します。 EXPLAINを参照してください constの場合 -サブクエリが実行されました。

    prism_data.xについて 、.y および.z :ジオメトリ列とそのための空間インデックスを作成することをお勧めします。個別の値に固執する必要がある場合は、ワールドジオメトリ全体を固定サイズのボクセル(単一のintで表される)に分割し、単純なジオメトリを使用して、どの位置がどのボクセルに該当するかを把握することをお勧めします。

    私の個人的な解決策は、このテーブルに何億ものクエリを追加することについてあまり考えないことです。インデックスはそれを遅くて大きくします。 cronジョブを使用してレポートテーブル(マテリアライズドビュー)に入力し、事前に結果を生成し、cronジョブが実行されて再度更新される限り、それらを使用します。



    1. mysqlの発行順

    2. jQueryValidatorプラグイン-mysqlデータベースにある既存のユーザー名/メールを確認します

    3. Questsの概要最新のデータベース監視サービス-SpotlightCloud

    4. 複数の結果セットを返すPostgreSQL関数