0

2 つの列を持つ MySQL DB があります。「キー」と「使用済み」。Key は文字列、Used は整数です。特定のキーを検索し、6000000 行のデータを持つ巨大な MySQL DB で Use を返す非常に高速な方法はありますか?

4

2 に答える 2

2

keyフィールドにインデックスを作成することで高速化できます。

CREATE INDEX mytable_key_idx ON mytable (`key`);

(key, used)実際には、両方のフィールドにカバリング インデックスを作成することで、読み取りをさらに高速化できます。

CREATE INDEX mytable_key_used_idx ON mytable (`key`, `used`);

この場合、読み取り時に、MySQLusedはテーブルを読み取らずにインデックス自体から値を取得できます (インデックスのみのスキャン)。ただし、書き込みアクティビティが多い場合は、インデックスと実際のテーブルの両方を更新する必要があるため、インデックスのカバーは遅くなる可能性があります。

于 2013-07-13T04:44:07.373 に答える
0

そのための規範的な SQL は次のようになります。

SELECT t.key, t.used FROM mytable t WHERE t.key = 'particularvalue' ; 

からの出力

EXPLAIN 
SELECT t.key, t.used FROM mytable t WHERE t.key = 'particularvalue' ; 

アクセスプラン、考慮されているインデックスなどの詳細を提供します。

からの出力

SHOW CREATE TABLE mytable ; 

テーブル、使用されているエンジン、使用可能なインデックス、およびデータ型に関する情報を提供します。

このようなクエリのパフォーマンスの低下は、通常、適切なインデックスが利用できないか、使用されていないために、アクセス プランが最適ではないことを示しています。場合によっては、列のデータ型と述語のリテラル データ型の間の文字セットの不一致により、特定のクエリでインデックスが「使用不可」になることがあります。

于 2013-07-13T04:55:06.550 に答える