2013-03-02 3 views
-1

입니다. 다음 데이터를 사용하여 아래 표를 고려하십시오.이 세 테이블의 데이터를 쿼리하는 가장 좋은 방법은

DROP SCHEMA IF EXISTS `jointest`; 
CREATE SCHEMA `jointest`; 
USE `jointest`; 

CREATE TABLE x (id INT PRIMARY KEY AUTO_INCREMENT , field VARCHAR(20)); 
CREATE TABLE z (id INT PRIMARY KEY AUTO_INCREMENT, field VARCHAR(20)); 
CREATE TABLE y (id_x INT, id_z INT, PRIMARY KEY (id_x, id_z)); 

INSERT INTO x VALUES (NULL,"Good Morning,"), (NULL,"Good Night,"), (NULL,"Bye"); 
INSERT INTO z VALUES (NULL, "Dad"), (NULL, "Mom"), (NULL, "Bro!"); 
INSERT INTO y(id_x, id_z) values(1,1), (1,2), (1,3), (2,1), (2,2), (3,3); 

테이블 x, z의 데이터를 쿼리하는 더 나은 솔루션이 있습니까? 나는 가까운 무언가를 장만하고 있습니다.

SELECT x.field, z.field 
FROM y 
    INNER JOIN x ON (y.id_x = x.id) 
    INNER JOIN z ON (y.id_z = z.id) 
ORDER BY x.id; 

도와 주셔서 감사합니다!

+0

무엇보다 솔루션이 더 좋습니까? 당신이 보여주는 쿼리보다? – DiMono

+0

검색어에 어떤 문제가 있습니까? – Oliver

+0

@DiMono 내 영어로, '최고 성능'이라고 말했어 야했다. @Oliver 표 x, y 또는 z에서 시작하여 내부, 외부, 왼쪽, 오른쪽 또는 다른 것을 사용하는 것이 더 나을지 모르겠다. 아직 다른 모범 사례 ... –

답변

1

MySQL에는 Query Optimizer이 내장되어 있으므로 테이블과 조인을 순서에 관계없이 사용할 수 있습니다. 사용할 조인 유형을 선택하는 것은 성능 문제가 아니며 반환 할 결과에 따라 다릅니다. 1.

확실한 쿼리 성능을 얻으려면 적절한 열에 인덱스를 추가하는 것도 중요합니다.

관련 문제