2014-11-25 3 views
0

나는이 질문에 대한 대답에 설명 된 인덱스 생성에 문제가 두 값의 조합에 고유 제한 조건을 만드는 방법 : sql unique constraint on a 2 columns combinationMySQL을 - 당신은 두 개의 열

내가 MySQL을 사용하고있다, 그리고 나는 구문 오류가 발생했습니다

CREATE UNIQUE INDEX ON friends (LEAST(userID, friendID), GREATEST(userID, friendID)); 

LEAST 및 GREATEST 함수는 MySQL의에서 사용할 수 있습니다,하지만 어쩌면 구문이 달라야합니다 다음과 같이,이 쿼리의 나의 버전은 무엇입니까? ALTER TABLE 버전을 만들려고했으나 제대로 작동하지 않습니다.

+0

이유는 무엇입니까? 고유 한 userID, friendID를 넣은 다음 두 개의 열에 외래 키를 놓고 참조하는 테이블/필드를 말하십시오. –

+1

그럴 수 없습니다. 인덱스는 파생 값이 아닌 필드에 있습니다. –

답변

0

MySQL에서는 함수를 인덱스 값으로 사용할 수 없습니다.

문서는 명시 적으로 진술하지 않습니다는, 그러나, 그것은 "고정"만 지원 인덱스의 기본 특성 인 데이터 :

인덱스는 신속하게 특정 열 값이있는 행을 찾기 위해 사용된다. 인덱스가 없으면 MySQL은 첫 번째 행으로 시작한 다음 전체 테이블을 읽어 해당 행을 찾아야합니다.

일반적으로이 고정 데이터는 개별 열/필드입니다. 문자열 필드 (예 : varchar 또는 text)를 사용하면 전체 열이 아닌 접두사 색인을 가질 수 있습니다. 자세한 내용은 CREATE INDEX을 확인하십시오.

예를 들어 만들려는 고유 색인은 단일 레코드를 갖습니다. 전체 테이블을 검색하는 데 도움이되지 않기 때문에 실제로 유익한 인덱스는 아닙니다. 그러나 userID, friendID에 표를 색인하면 SELECT 문에 LEAST()GREATEST() 함수를 사용하면 색인 자체가 최적화되므로이 경우에 따라 달라질 수 있습니다.

+0

자, MySQL에서 작동하는 또 다른 솔루션이 http://stackoverflow.com/questions/10159411/sql-unique-constraint-on-a-2-columns-combination에 설명 된 제약 사항을 만들 수 있습니까? – Busiek