라이브러리와 책 사이의 관계형 모델을 사용하고 조인을 사용하여 쿼리합니다. library_id
에 대한 기본 키와 색인이 설정되어 있으면 상당히 빠릅니다.
table: libraries
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | YES | PRI | NULL | |
| name | varchar(100) | NO | | NULL | |
+-------+--------------+------+-----+---------+-------+
+------+------+
| id | name |
+------+------+
| 1 | Foo |
| 2 | Bar |
+------+------+
table: books
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | 0 | |
| library_id | int(11) | NO | MUL | NULL | |
| author | varchar(100) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
+------------+--------------+------+-----+---------+-------+
+----+------------+--------+------+
| id | library_id | author | name |
+----+------------+--------+------+
| 1 | 1 | Jon | Baz |
| 2 | 1 | Bill | Baz |
| 3 | 2 | Mary | Abc |
+----+------------+--------+------+
이 매우 쉽게 쿼리 수 있습니다.'푸'의 이름으로 도서관에있는 모든 책을 찾으려면,이 같은 쿼리를 사용하십시오 : 이미 라이브러리 ID를 알고있는 경우
mysql> SELECT books.* FROM books
-> JOIN libraries ON libraries.id = books.library_id
-> AND libraries.name = 'Foo';
+----+------------+--------+------+
| id | library_id | author | name |
+----+------------+--------+------+
| 1 | 1 | Jon | Baz |
| 2 | 1 | Bill | Baz |
+----+------------+--------+------+
을, 당신도 필요하지 않습니다 조인 :
를
mysql> SELECT * FROM books
-> WHERE library_id = 2;
+----+------------+--------+------+
| id | library_id | author | name |
+----+------------+--------+------+
| 3 | 2 | Mary | Abc |
+----+------------+--------+------+
외래 키를 사용하면 mysql이 임시 테이블을 만들 필요가 없으며 결과 집합을 정렬 할 필요가 없다는 뜻입니까? E.G 실제 정렬을 시작하기 전에 전체 책 결과 세트의 조인 된 값으로 임시 테이블을 올리십시오. –