[오리지널] MySQL 5.6 MRR의 스토리지 프로세스에 대한 완벽한 설명
나는 저장 프로세스로 이 과정의 변화를 설명했다.모두들 세심하게 체득해라.
우리는 문장에 대해 다음과 같이 말한다.
- select log_time from person where nick_name = 'Lucy';
테이블 구조는 다음과 같습니다.
- CREATE TABLE `person` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `nick_name` varchar(40) NOT NULL,
- `log_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- KEY `idx_nick_name` (`nick_name`)
- ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
먼저 MySQL 5.5.
- DELIMITER $$
- USE `ytt`$$
- DROP PROCEDURE IF EXISTS `sp_range_scan5_5`$$
- CREATE DEFINER=`admin`@`%` PROCEDURE `sp_range_scan5_5`()
- BEGIN
- -- Sample sql statement is below.
- -- select log_time from person where nick_name = 'Lucy';
- DECLARE i INT UNSIGNED DEFAULT 0;
- DECLARE cnt INT UNSIGNED DEFAULT 0;
- SET @result = '';
- SELECT COUNT(1) INTO cnt FROM person WHERE nick_name = 'Lucy';
-
- loop1:WHILE i < cnt
- DO
- SET @stmt = CONCAT('select id into @v_id from person where nick_name = ''Lucy'' order by nick_name asc limit ',i,',1');
- PREPARE s1 FROM @stmt;
- EXECUTE s1;
-
- SET @result = CONCAT(@result,'select log_time from person where id = @v_id');
- SET @result = CONCAT(@result,' union all ');
- SET i = i + 1;
- END WHILE loop1;
- SET @result = SUBSTR(@result,1,CHAR_LENGTH(@result)-CHAR_LENGTH(' union all '));
- PREPARE s1 FROM @result;
- EXECUTE s1;
- DROP PREPARE s1;
- SET @result = NULL;
- END$$
- DELIMITER ;
다음은 MySQL 5, 6.
- DELIMITER $$
- USE `ytt`$$
- DROP PROCEDURE IF EXISTS `sp_range_scan5_6`$$
- CREATE DEFINER=`admin`@`%` PROCEDURE `sp_range_scan5_6`()
- BEGIN
- -- Sample sql statement is below.
- -- select log_time from person where nick_name = 'Lucy';
- DECLARE i INT UNSIGNED DEFAULT 0;
- DECLARE cnt INT UNSIGNED DEFAULT 0;
- DECLARE ids TEXT;
- SET ids = '';
- SELECT COUNT(1) INTO cnt FROM person WHERE nick_name = 'Lucy';
-
- loop1:WHILE i < cnt
- DO
- SET @stmt = CONCAT('select id into @v_id from person where nick_name = ''Lucy''
- order by nick_name asc limit ',i,',1');
- PREPARE s1 FROM @stmt;
- EXECUTE s1;
- SET ids = CONCAT(ids,@v_id,',');
- SET i = i + 1;
- END WHILE loop1;
- SET ids = CONCAT('(',SUBSTR(ids,1,CHAR_LENGTH(ids)-1),')');
- SET @result = CONCAT('select log_time from person where id in',ids);
- PREPARE s1 FROM @result;
- EXECUTE s1;
- DROP PREPARE s1;
- SET @result = NULL;
- END$$
- DELIMITER ;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깨끗한 것을 보고 싶기 때문에 최적화 함수의 벤치마크에 이용되는 함수의 가시화를 해 보았다결정되지 않음 (자기 만족) 「헤이 이런 거 있어」라고 생각하는 사람 최적화 함수란? 거친 이미지로 1) x + 10 = 25 2) x + 60 = 15 3) x + 45 = 60 의 x를 기계에 구할 때 정확하게 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.