2012-10-03 3 views
2

SQLite 데이터베이스가 있는데 INSERT OR IGNORE 쿼리를 사용하고 있습니다. 기본 키 및 또 다른 고유 한 열로 intintrereation int있는 테이블이 있습니다. 내 질문은, SQLite는 레코드가 이미 존재하는지 여부를 확인하여 무시할지 여부를 알 수 있도록하는 방법입니다. 기본 키를 먼저 스캔 한 다음 다른 고유 한 열을 스캔합니까? 그렇다면 일부 쿼리의 기본 키 앞에 고유 한 열을 비교할 수 있습니까? 또한 열이 고유 한 경우 이미 인덱싱되어 있습니까?SQL은 레코드가 존재하는지 어떻게 확인합니까?

답변

2

UNIQUE 제약 조건은 인덱스를 사용하여 구현되므로 UNIQUE 열은 이미 인덱싱되어 있습니다.

INSERT 또는 IGNORE를 평가할 때 테이블의 UNIQUE 제약 조건이 INSERT 문에 위배되면 OR IGNORE가 대신 사용됩니다. 평가 순서는 기능적 관점에서 중요하지 않으며 성능에 미치는 영향이 미미해야합니다. 예측의 순서는 쿼리 최적화 프로그램에 의해 처리되지만, 그렇지 않은 경우 성능 적중률은 작아야합니다.

+0

감사합니다. 중요한 성능 차이가 있는지 확실하지 않았습니다. – TryNCode

1

얼마나 깊게 가고 싶은가에 따라 downloading the SQLite3 source code을 추천하고 "고유"및 "제약 조건"과 같은 용어를 검색하기 시작할 수 있습니다. 질문에 대한 일부 답변은 소스를 통해 몇 분.

코드는 인 것으로 보입니다. 비정상적으로 잘 문서화 된입니다. SQLite를 많이 사용한다면 제공되는 주석을 읽는 것이 좋지 않을 수도 있습니다. 예상보다 많은 통찰력을 얻을 수 있습니다.

+0

제안 해 주셔서 감사합니다. 코드를 통해 자주 검색 할 때, 적절한 문서가 없기 때문에 혼란스러워합니다. 다른 흥미있는 팁을 위해 이것을 통하여 모양을 가져갈 것이다. – TryNCode

관련 문제