Amazon ec2 スモール インスタンスに 2200 万行のテーブルがあります。したがって、それは決して最速のサーバー環境ではありません。私はこれを作成しました:
CREATE TABLE huge
(
myid int not null AUTO_INCREMENT PRIMARY KEY,
version int not null,
mykey char(40) not null,
myvalue char(40) not null,
productid int not null
);
CREATE INDEX prod_ver_index ON huge(productid,version);
この呼び出しは即座に終了します:
select * from huge where productid=3333 and version=1988210878;
に関してはinserts
、PHPで100/秒を実行できますが、配列に1000回の挿入を詰め込むと、この同じテーブルで内破を使用すると、1秒あたり3400回の挿入が得られます。当然、データはそのようにはなりません。サーバーが比較的きびきびしていると言っているだけです。しかし、tadman が示唆するように、そして彼が言うつもりEXPLAIN
だったのは、典型的なステートメントの前で、キー列が、それを実行した場合に使用されるインデックスを示しているかどうかを確認することです。
一般的なコメント
クエリのデバッグが遅い場合は、その単語を単語EXPLAIN
の前に置きselect
(どんなに複雑であってselect/join
も)、それを実行します。結果セットを解決してクエリが通常の方法で実行されることはありませんが、db エンジンは (ほぼ即座に) 試行する実行計画を生成します。このプランは、実際のクエリが実行されたときに放棄される可能性があります (その前に EXPLAIN を配置する前のもの) が、スキーマの欠点に対する主要な手がかりになります。
の出力は、EXPLAIN
最初に読む人にとっては不可解に見えます。長くはありませんが。Using EXPLAIN to Write Better MySQL Queriesなどのいくつかの記事を読んだ後、通常、クエリのどのセクションがどのインデックスを使用しているか、none を使用して遅いテーブルスキャンを実行しているか、遅い where 句を使用しているか、派生テーブルと一時テーブルを使用しているかを判断できます。 .
composite
スキーマに対してサイズアップされた EXPLAIN の出力を使用すると、インデックス作成 (およびインデックスなど) の戦略についての洞察をcovering
得て、実質的なクエリ パフォーマンスを得ることができます。
共有
このEXPLAIN
出力とスキーマ出力を他のユーザー (stackoverflow の質問など) と共有すると、パフォーマンスに関するより良い回答が得られます。スキーマ出力は、 などのステートメントでレンダリングされshow create table myTableName
ます。共有してくれてありがとう。