MySQL 서버 버전 : 우분투 10.04MySQL의 조회수 또는 IN 절 대
에 5.1.41 내가 어떤 쿼리를 수정할 때의 MySQL의 행동에 차이를 가로 질러 와서 그것에 대한 이유를 알고 싶어.
기본적으로보기를 만듭니다. 뷰를 쿼리 할 때 결과 집합은 동일합니다 그러나 읽는 행의 수는 OR
절보다 IN
절의 내용이 다릅니다.
CREATE TABLE country (
id_country int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
PRIMARY KEY (id_country)
) ENGINE=InnoDB;
INSERT INTO country (name) VALUES ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H');
CREATE TABLE status (
id_status int(11) NOT NULL AUTO_INCREMENT,
id_country int(11) NOT NULL,
status tinyint(4) NOT NULL,
PRIMARY KEY (id_status)
) ENGINE=InnoDB;
ALTER TABLE status ADD INDEX (id_country);
ALTER TABLE status ADD FOREIGN KEY (id_country) REFERENCES test.country (id_country) ON DELETE RESTRICT ON UPDATE RESTRICT ;
INSERT INTO status(id_country, status) VALUES
(1,0), (2,1), (3,0), (4,1), (5,0),(6,1), (7,0), (8,1);
CREATE ALGORITHM=MERGE VIEW view_country
AS
SELECT c.*, s.id_status, s.status
FROM country c JOIN status s ON c.id_country = s.id_country;
2 개의 행의 표시 다른 수 아래 문을 설명 당신은 "행을 볼 경우 또는 제
mysql> EXPLAIN EXTENDED SELECT * FROM view_country WHERE id_country = 1 OR id_country = 2 OR id_country = 3\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: s
type: ALL
possible_keys: id_country
key: NULL
key_len: NULL
ref: NULL
rows: 8
filtered: 37.50
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: c
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: test.s.id_country
rows: 1
filtered: 100.00
Extra:
2 rows in set, 1 warning (0.00 sec)
를 사용
mysql> EXPLAIN EXTENDED SELECT * FROM view_country WHERE id_country IN (1, 2, 3)\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: c
type: range
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: NULL
rows: 3
filtered: 100.00
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: s
type: ref
possible_keys: id_country
key: id_country
key_len: 4
ref: test.c.id_country
rows: 1
filtered: 100.00
Extra:
2 rows in set, 1 warning (0.00 sec)
을 구문 분석 : 아래의 아래의 간단한 예입니다 "두 쿼리 모두 - 서로 다르게 합쳐집니다.
쿼리는 OR
절은 IN
에 비해 적은 행을 읽습니다.이 테이블은 거대한 테이블과 조인을 합산합니다.
이유가 무엇인지 이해할 수 있습니까?
감사합니다.
지속적으로 동일하지만 서로 다른 결과 : 연구 성과와 실행에
더 다음 두 사이트를 체크 아웃 계획? –
@Marcus - 나는 혼란 스럽다. 질문을 이해하지 못했다. 매번 일관성있는 결과를 얻었고, 매번 해석되는 행의 수가 일정하다는 것을 의미한다면, 대답은 예이다. – naveen
@Marcus Adams - 복사 붙여 넣기가있다. 내 부분에 큰 실수 - 나는 그것을 정정했다. 이 문제는 다른 결과 집합에 대한 것이 아닙니다. 결과 집합은 동일하지만 읽는 행 수는 IN과 OR 사이에 다릅니다. 재현 할 수없는 경우 알려주십시오. - 서버 버전 : 5.1 – naveen