2009-09-22 6 views
3

제약 조건을 만들 때 'FK5E6B788655A1514E'와 같은 이름이 지정됩니다.MySQL 외래 키 자동 생성 이름이 결정적입니까?

이름 생성이 결정적인지 또는 임의인지 궁금합니다. 동일한 스키마를 사용하는 두 개의 데이터베이스가 동일한 FK 이름으로 끝났습니다.

스키마의 한 버전에서 다른 버전으로 업그레이드 스크립트를 작성하여 이러한 제약 조건 이름을 사용하는 것이 맞습니까?

+0

나는 당신이 당신의 세 번째 문장으로 자신의 질문에 대답했다고 생각합니다. 당신의 진짜 질문은 마지막 문장입니까? –

답변

3

나는 꽤 오랜 시간 동안 이것에 대해 궁금해했고, 내 자신의 연구를 수행 한 후에 오늘 귀하의 게시물을 우연히 발견했습니다. 다행히도 내가 찾은 것이 당신을 도울 것입니다. http://dev.mysql.com/doc/refman/5.5/en/innodb-adaptive-hash.html 가입일

:

이노 인덱스 검색을 모니터하는기구를 갖는다. InnoDB가 쿼리가 해시 인덱스의 구축으로부터 이익을 얻을 수 있다고 에 통지하면, 가 자동적으로 실행된다. 이 기능은 innodb_adaptive_hash_index 옵션에 의해 활성화되거나 서버 시작시 --skip-innodb_adaptive_hash_index에 의해 꺼집니다.

이 기능의 구현에 대한 이유는 여기에 설명되어있는 테이블은 메인 메모리에 거의 맞

경우 해시 인덱스 도는 어떤 요소의 직접 검색을 가능하게함으로써 최대 질의 속도를 높일 수 인덱스 값을 일종의 포인터에 넣습니다. adaptive_hash_index에

더는 여기에서 찾을 수 있습니다 : http://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_adaptive_hash_index

이, 그들은 인덱스 이름의 실제 발생 설명 :

해시 인덱스는 항상 기존의 이노를 기반으로 구축

보조 색인은 B- 트리 구조로 구성됩니다. MySQL은 색인에 대한 검색 패턴에 따라 B-tree에 대해 정의 된 키 길이의 접두어에 해시 색인을 작성할 수 있습니다. 해시 색인은 부분적 일 수 있습니다. 전체 B- 트리 색인은 버퍼 풀에 캐시 된 일 필요가 없습니다.

마지막으로, 여기에 조금 더 인덱스에있다 : http://dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html

이 모든 것을 통해 읽은 후, 내가 믿는만큼 당신의 DB 스키마와 엔진이 동일하고에서 동일한 구성 옵션을 가지고 다른 환경에서는 진화/마이그레이션 스크립트에서이 값을 사용해도됩니다.

1

컴퓨터 생성 이름이 일관된 것으로 보입니다. 그러나 이것은 보장 된 행동이 아닙니다. 필자는 MySQL이 향후 버전에서 이름을 생성하는 방법을 변경할 필요가 있다면 그렇게함으로써 이전 버전과의 호환성을 깨닫지 못한다고 생각합니다.

자동으로 생성 된 이름을 무시할 수 있음을 알고 있습니까?

create table foo (
    i int, 
    constraint `i_is_unique` unique key (i) 
); 
+0

예, 알고 있습니다 ...하지만! 업그레이드 외에도 수동으로 스키마를 건드리지 않고 있습니다 ... JavaEE 애플리케이션을 배포 할 때 테이블을 자동 생성하도록하고 있습니다. – carrier