2011-04-11 10 views
1

저는 데이터베이스를 처음 사용합니다. 두 개의 열이있는 기본 키를 만들면 userIddayOfWeek입니다. 이 기본 키는 어떻게 검색 할 수 있습니까?복수 열 조회가있는 기본 키

(의 dayOfWeek은 INT이고 1 = 월요일 2 = 화요일 등)

내가 할 것인가 사용 :

SELECT * 
WHERE userId = 1 
    AND dayOfWeek = 4 

겠습니까 전체 데이터베이스를 스캔하거나 차에서 제공하는 정보를 사용하여 키? 사용할 수있는 또 다른 적절한 쿼리가 있습니까?

답변

1

기본 키 인덱스는 내부적으로 다른 색인과 매우 비슷합니다. 명시 적으로 말하면 은 레코드를 고유하게 식별하는 키입니다. 단순히 "반드시 고유해야합니다"제약 조건이 적용된 색인 일뿐입니다.

DB가 복합 기본 키를 사용하는지 여부는 쿼리에서 키 필드를 지정하는 방법에 따라 다릅니다. 다음 PK (아이디,의 dayOfWeek),

SELECT * FROM mytable WHERE (userID = 1); 
SELECT * FROM mytable WHERE (userID = 1) AND (dayOfWeek = 4); 

을 감안할 때 당신은 그들이 키 내에서 지정하고 순서대로 필드를 사용했기 때문에 모두가 기본 키 인덱스를 사용합니다.

그러나

,

SELECT * FROM mytable WHERE (dayOfWeek = 4) 

userID 때문에 지정되지 않았습니다되지 않으며, userID 키 정의에 dayOfWeek 전에 온다.

2

데이터베이스에있는 모든 테이블을 지정하지 않으면 쿼리가 전체 데이터베이스를 검색하지 않습니다. 최악의 경우 기본 키가 아니거나 인덱싱 된 열을 기준으로 검색하는 경우 테이블 스캔 (실제로 의미한다고 생각하는 방식입니다)을 기대할 수 있습니다.

귀하의 예는 둘 이상의 열을 키로 사용하기 때문에 복합 기본 키입니다. 이제 MySQL은 기본 키를 자동으로 색인화합니다 (v5부터?). 따라서 모든 기본 키 열을 검색하면 표 스캔이 발생하지는 않지만 색인 검색/검색이 수행됩니다. 다른 기준이 사용되는지 여부에 달려 있습니다. 기본 키의 일부 (IE : user_id 만)로 검색하면 인덱스를 사용할 수 있습니다. 덮어 쓰는 인덱스라고 가정합니다. user_id 열이 왼쪽부터 첫 번째이고 인덱스를 사용할 수있는 경우입니다. 그렇지 않으면.

관련 문제