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