sql >> データベース >  >> RDS >> Mysql

MySQLは、列を主キーではなくAUTO_INCREMENTを持つUNIQUEとして定義しています

    明示的なしで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には使用しますが、簡単に破損します。



    1. mysqlでのリレーショナルテーブルの作成

    2. PostgreSQL接続nodejsのSSL

    3. PostgreSQLは、欠落している場合、前の行の値を使用します

    4. PHP / MySQL-複数形を含みますが、単数形は除外します