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 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 - 전체 시스템에서 라이브가 될 때 성능 문제가 발생하지 않도록 할 수 있습니다. –