ホームページ  >  記事  >  バックエンド開発  >  mysql パフォーマンス クエリの使用を記録する方法 process_PHP チュートリアル

mysql パフォーマンス クエリの使用を記録する方法 process_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:11:29942ブラウズ

すべては実験から来ています。以下の例をご覧ください:

テーブル:

コードをコピー コードは次のとおりです:

CREATE TABLE IF NOT EXISTS `foo` (
`a` int(10) unsigned NOT NULL AUTO_INCREMENT,
`b` int(10) unsigned NOT NULL 、
`c` varchar(100) NOT NULL、
主キー (`a`)、
KEY `bar` (`b`,`a`)
) ENGINE=InnoDB;

CREATE TABLE IF NOT; EXISTS `foo2 ` (
`a` int(10) unsigned NOT NULL AUTO_INCREMENT、
`b` int(10) unsigned NOT NULL、
`c` varchar(100) NOT NULL、
PRIMARY KEY (`a`)、
KEY ` bar` (`b`,`a`)

) ENGINE=MyISAM

300,000 個のデータを 2 つのテーブルに挿入しました (挿入時のパフォーマンスの違いは、InnoDB が MyISAM よりも遅いことです)

コードをコピーします コードは次のとおりです:


$host = ' 192.168.100.166 ';

$dbName = 'test';

$password = ''; 'DB 接続に失敗しました');

mysql_select_db($dbName, $db);

echo '==================InnoDB======== === ============' . "rn";

$start = microtime(true);

mysql_query("FROM foo WHERE b = 1 LIMIT 1000, 10 ");

$end = microtime(true);

echo $end - $start . "rn";

echo '==================== MyISAM=== =============' . "rn"

$start = microtime(true); SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS; foo2 WHERE b = 1 LIMIT 1000, 10");

$end = microtime(true);

echo $end - $start . "rn";


戻り結果:




1 つのクエリで大きな違いが生まれます。 ! InnoDB と MyISAM は、その理由をすぐに分析します。

まず Explain を使用して確認してください


2 番目のクエリでクエリされる行が、InnoDB よりもはるかに少ないことを確認してください。逆に、クエリは InnoDB よりも遅くなります。 !このYはちょっと変です。

大丈夫、素晴らしいツールプロファイルもあります

具体的な使用方法については、http://dev.mysql.com/doc/refman/5.0/en/show-profile.htmlを参照してください。

簡単な使い方:

コードをコピーします

コードは次のとおりです:

Mysql>プロファイルを表示

ご覧いただけますMyISAM へのデータの送信は、InnoDB へのデータの送信よりもはるかに時間がかかります。 mysql ドキュメントを見る
http://dev.mysql.com/doc/refman/5.0/en/general-thread-states.html



データを送信中

スレッドは SELECT ステートメントの行を読み取り、処理し、クライアントにデータを送信します。この状態中に発生する操作は大量のディスク アクセス (読み取り) を実行する傾向があるため、多くの場合、この状態は存続期間全体で最も長時間実行される状態になります。指定されたクエリの。

データの送信とは、選択の結果をディスクから読み取り、結果をクライアントに返すことです。このプロセスには多数の IO 操作が含まれます。 show profile cpu for query XX を使用すると、MyISAM の CPU_system が InnnoDB よりもはるかに大きいことが確認できます。この時点で、テーブル クエリ (インデックスのみを使用して完了できるクエリとは異なります) に関して、MyISAM は InnoDB よりも遅いと結論付けることができます。

http://www.bkjia.com/PHPjc/326869.html

www.bkjia.com


本当

http://www.bkjia.com/PHPjc/326869.html

技術記事

すべては実験から生まれたものです。次の例を参照してください。 テーブル: 次のようにコードをコピーします: CREATE TABLE IF NOT EXISTS `foo` ( `a` int(10) unsigned NOT NULL AUTO_INCREMENT, `b` int(10) u .. .

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP_PHP チュートリアルに基づいてアップロードされた画像の名前を変更するための 6 つのソリューションの詳細な紹介次の記事:PHP_PHP チュートリアルに基づいてアップロードされた画像の名前を変更するための 6 つのソリューションの詳細な紹介

関連記事

続きを見る