7
私はselectステートメントのリストを持っており、そのクエリプランを知りたいと思います。それぞれにプレフィックスを付ける代わりに簡単な方法がありますか?mysqlクエリプラン
Sybaseでは、フラグを設定することでこれを行うことができます。同等のものがあるかどうか疑問に思うだけですか?
私はselectステートメントのリストを持っており、そのクエリプランを知りたいと思います。それぞれにプレフィックスを付ける代わりに簡単な方法がありますか?mysqlクエリプラン
Sybaseでは、フラグを設定することでこれを行うことができます。同等のものがあるかどうか疑問に思うだけですか?
あなたはこのためslow query log
を乱用することができます
セットlong_query_time = 0
、これはスロークエリログ内のすべてのクエリをログに記録するMySQLを強制します。 http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html あなたはスロークエリログがテーブルにクエリを入れてみましょうことを確認し、これが今のようなストアドプロシージャを記述5.1+
のデフォルトです:今、あなたはログを参照して、表示したい場所に設定
そう:
DELIMITER $$
CREATE PROCEDURE run_explain_on__the_slow_query_log(IN which_db VARCHAR(512))
BEGIN
DECLARE sql VARCHAR(10000);
DECLARE done INTEGER DEFAULT 0;
DECLARE cursor1 CURSOR FOR SELECT sql_text FROM mysql.slow_log
WHERE sql_text LIKE 'SELECT%'
AND (db = which_db OR which_db IS NULL);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cursor 1;
WHILE NOT (done) DO
FETCH cursor1 INTO sql;
SET sql = CONCAT('EXPLAIN EXTENDED ',sql);
PREPARE stmt FROM sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END WHILE;
END $$
DELIMITER ;
あなたはそれを少し微調整する必要があるかもしれませんが、ここでslow_log
テーブルのcreate文です。
CREATE TABLE mysql.slow_log(
start_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
user_host MEDIUMTEXT NOT NULL,
query_time TIME NOT NULL,
lock_time TIME NOT NULL,
rows_sent INT(11) NOT NULL,
rows_examined INT(11) NOT NULL,
db VARCHAR(512) NOT NULL,
last_insert_id INT(11) NOT NULL,
insert_id INT(11) NOT NULL,
server_id INT(10) UNSIGNED NOT NULL,
sql_text MEDIUMTEXT NOT NULL
)
ENGINE = CSV
CHARACTER SET utf8
COLLATE utf8_general_ci
COMMENT = 'Slow log';
多数のクエリを並行して分析する予定はありますか? :) – Karolis
@Karolis - システム全体がライブになると、パフォーマンスの問題が発生しないことを保証できるようにするためのシステム全体 –