0

かなり大きなテーブル (Facebook 規模ではなく、約 100 万行) でいくつかの MySQL クエリを実行していますが、非常に遅いことがわかりました。idその理由は、フィールドに対してクエリを実行しているが、それidが主キーとして宣言されておらず、インデックスも宣言されていないためだと思われます。

idカーディナリティは1にかなり近いですが、一意ではないため、フィールドを主キーに設定できません。このような状況でalter table、フィールドにインデックスを追加するidと、クエリの速度が向上しますか?それが主キーではないことを考えると?

そうなった場合、インデックスが完全に発達してクエリがすぐに実行されるようになるまでにどれくらいの時間がかかりますか? つまり、実行後にプロンプ​​トが表示された瞬間alter table、またはプロンプトが表示されても内部でインデックス構築がかなりの時間続くということですか? (一意でないフィールドでインデックスを宣言するとデータベースが破損するかどうかわからないため、実行する前に尋ねています)

4

1 に答える 1

2

任意のインデックスは、対応する列に一致するクエリを高速化します。この点では、主キーと他のインデックスの間に大きな違いはありません。

ALTER TABLEクエリを実行すると、すぐにインデックスが作成されます。プロンプトが戻ると、インデックスがそこにあり、使用されます。これが起こっている間、破損はありません。

于 2013-06-18T17:39:42.567 に答える