単一引用符による MYSQL のパフォーマンスの低下
人生において、何らかの不満に遭遇することは避けられません。その不満の一部は自分自身から来るものであり、また一部はそうではありません。今日は北半球で昼が最も短く夜が最も長いと言われる冬至です。今日は、私の同僚の一人が、一重引用符を追加するかどうかの大きな違いについて言及したことを共有します。これは、MYSQL のパフォーマンスの最適化にとって非常に重要です。
先ほども言いましたが、人生には必ず不満がつきものです。たとえば、主キーとして文字列型のフィールドを使用します。これでは表面的にはあまりにも不満です。しかし、それは証明されています。役に立つこと。問題は、クエリ ステートメントのフィールド値に一重引用符が追加されると、クエリ時間が 100 倍も異なってしまうということです。
私が作成したテスト テーブルは次のようになります。
CREATE TABLE `foo` ( `key` VARCHAR(10) NOT NULL, `time` INT(11) NOT NULL, PRIMARY KEY (`key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
次に、300,000 個を超えるデータを挿入し、次の SQL ステートメントを実行します。
SELECT * FROM `foo` WHERE `key` =1293322797
クエリには 0.1288 がかかります。これは約 100 倍の違いであり、クエリには 0.0009 秒かかります。その後、一重引用符を 1293322797 に追加します。 ! !つまり、一重引用符を追加しないと、MYSQL のパフォーマンスが 100 分の 1 に低下します。これは驚くべき比率です。
その後、以下の 2 つの図に示すように、EXPLAIN を使用して上記の 2 つのステートメントをそれぞれ実行しました。
一重引用符がない場合
With 一重引用符を使用する場合
一重引用符を使用しないとメイン インデックスが使用されず、テーブル全体のスキャンが実行されることがわかります。上部のインデックスを使用できます。
後で、「より大きい」を使用して個別にテストしましたが、返された結果セットは同じで、時間のかかり方も上記と同じでした。EXPLAIN を使用してテストしましたが、上記と同じでした。
SELECT * FROM `foo` WHERE `key` ='1293322797'
一重引用符を付ける場合と付けない場合では、大きな違いが生じます。それは mysql のパフォーマンスに大きな影響を与えます。
その後、フィールドのキーをINT型に変更しましたが、このときシングルクォーテーションを付けるか付けないかの違いはなく、EXPLAINではメインインデックスも使えることが分かりますが、key_lenが短くなってしまいます。
推奨: 「
mysql チュートリアル以上が一重引用符は MySQL のパフォーマンスを低下させますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。