2

何千ものレコードを持つテーブルがあります。人物が存在するかどうかを調べるために、このような選択を何度も行います。

SELECT * from person WHERE personid='U244A902'

個人 ID は純粋な数値ではないため、主キーとして使用せず、自動インクリメントを使用しました。SELECTSしかし、テーブルがいっぱいになるにつれて遅くなっていくと思うので、今は自分の戦略を再考しています. この遅さの背後にある理由personidは、主キーではないためだと思います。

したがって、私の質問は、テーブルを再構築する手間をかけ、personid代わりに自動インクリメントなしで主キーとして使用すると、選択が大幅に高速化されるでしょうか? 現在 200,000 件のレコードがあり、完了すると約 500 万件になるテーブルについて話しています。

4

3 に答える 3

2

速度が遅いのは、キーとして定義されていないためにインデックスが作成されていないという点で、が主キーではないという事実が間接的に原因です。personid最も簡単な修正は、単純にインデックスを作成することです。

CREATE UNIQUE INDEX `idx_personid` ON `person` (`personid`);

ただし、一意の値である場合は、テーブルの主キーにする必要がありますauto_increment別のキー は必要ありません。

ALTER TABLE person DROP the_auto_increment_column;
ALTER TABLE person ADD PRIMARY KEY personid;

ただし、他のテーブルでthe_auto_increment_columnasも使用していてFOREIGN KEY、それを削除してを使用した場合は、代わりpersonidに使用する他のすべてのテーブルを変更する必要があることに注意してください。personidそうすることの難しさは、あなたにとって完全に価値のあるものではないかもしれません。

于 2012-09-03T13:49:54.820 に答える
1

personid へのインデックスを作成できます。

CREATE INDEX id_index ON person(personidid)
于 2012-09-03T13:50:53.733 に答える
1
ALTER TABLE `person ` ADD INDEX `index1` (`personid`);

where句を使用しているか、列を選択している列にインデックスを付けてみてください

于 2012-09-03T13:50:59.967 に答える