明示的なしでMySQLを定義する 主キーは非常に悪い考えです。
PKが欠落している場合、MySQLは暗黙的な(しかし非常に現実的な)整数の自動インクリメント主キーを作成します。
このPKはInnoDBおよびMyISAMでのプライマリソート順を決定します。
結果
選択、挿入、更新のすべてのパフォーマンスが低下しました。
目的はありません。
InnoDB:テーブルデータを取得するには追加のルックアップが必要です
InnoDBでは、すべてのセカンダリインデックスが行自体ではなくPKを参照するため、追加のルックアップを実行する必要があります。
MyISAM:無駄なスペース
MyISAMでは、ペナルティはそれほど大きくありませんが、使用されていない4バイトの未使用フィールドに沿ってドラッグしています。
InnoDB + MyISAM:自動インクリメントフィールドの無用な生成
暗黙の自動インクリメントPKが作成され、結合を行うために追加の自動インクリメントキーも必要だったため。自動インクリメントフィールドの重複を防ぐために、挿入ごとに1つではなく2つのテーブルロックがあります。
InnoDB:上記のルックアッププローブを結合すると2倍になります
PK以外のフィールドを使用して結合を行う場合、InnoDBは結合ごとに追加のルックアップを実行する必要があります。 他のテーブルのレコードを取得します。
InnoDB:最悪の場合、インデックスをカバーするメリットが失われます
InnoDBで最高の最適化の1つを無効にして、インデックスをカバーしています。
MySQLがインデックス内のデータのみを使用してクエリを解決できる場合、テーブルを読み取ることはありません。これにより、大幅な速度が向上します。利得。 InnoDBのすべてのインデックスの50%が未使用のスペースであるため、その最適化が使用される可能性はほとんどありません。
手がかり棒でこの請負業者を倒してください!
リンク:
http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/
(リンクは遅いですが、読むことをお勧めします)。
InnoDBのカバーインデックスに関するO'Reilly
http://tag1consulting.com/MySQL_Engines_MyISAM_vs_InnoDB
BTW 、請負業者がMyISAMを使用しているので、それはそれほど重要ではありません。もう一度彼を倒してください。正当な理由がない限り、常にInnoDBを使用する必要があります。
InnoDBは、本番環境ではるかに安全です。MyISAMには使用しますが、簡単に破損します。