かなり大きなテーブル (Facebook 規模ではなく、約 100 万行) でいくつかの MySQL クエリを実行していますが、非常に遅いことがわかりました。id
その理由は、フィールドに対してクエリを実行しているが、それid
が主キーとして宣言されておらず、インデックスも宣言されていないためだと思われます。
id
カーディナリティは1にかなり近いですが、一意ではないため、フィールドを主キーに設定できません。このような状況でalter table
、フィールドにインデックスを追加するid
と、クエリの速度が向上しますか?それが主キーではないことを考えると?
そうなった場合、インデックスが完全に発達してクエリがすぐに実行されるようになるまでにどれくらいの時間がかかりますか? つまり、実行後にプロンプトが表示された瞬間alter table
、またはプロンプトが表示されても内部でインデックス構築がかなりの時間続くということですか? (一意でないフィールドでインデックスを宣言するとデータベースが破損するかどうかわからないため、実行する前に尋ねています)