자동 증가 ID 열이 기본 키로있는 테이블 X가 있습니다. 나는 테이블 X의 정보를 보완하는 다른 테이블 A, B, C 및 D를 가지고 있습니다. 이들 각각은 테이블 X의 ID를 참조하는 열을 포함해야합니다. 코드를 완료하고 코드 (Java)에서 각 항목의 ID를 테이블 X로 리턴하고 다른 테이블에 삽입 할 때이를 사용하는 방법. 모두 잘 작동합니다.외래 키 삭제 느려짐
이제 테이블 A, B, C 및 D의 ID 열을 "외래 키"로 할당하는 것이 좋습니다. "올바른 일"때문입니다. 내가 그거 했어. 이제 테이블 X에서 행을 삭제하면을 완료하는 데 많은 시간이 걸립니다. 다른 테이블에 삽입하는 데 너무 오래 걸립니다.
제발 나를 잘못하지 마세요, 왜 외국인 키가 DB의 테이블 관계를 지정하는 데 관련이 있는지 알고 있습니다. 그러나 내 거래가 점점 더 느려지면서 실제로 관련성이있는 것보다 의식적인 것으로 만 보이기 시작했습니다.
질문 :
1. 그것은 공식적으로 그 필요는 없습니다에도 불구하고 지정된 관계를 유지하기 위해 입찰에 일부 성능을 잃고 가치가?
2. 트랜잭션 속도를 높이고 외래 키 사양을 유지할 수있는 방법이 있습니까?
감사합니다.
은 테이블이 작성하는 방법입니다 여기에
을 회신합니다.
CREATE TABLE [dbo].[MainTableX](
[col1] [smalldatetime] ,
[col2] [varchar] (20) ,
[ID] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_MainTableX] PRIMARY KEY CLUSTERED
(
[ID] ASC
)
)
GO
CREATE TABLE [dbo].[RelatedTableA](
[differentID] [varchar] (50),
[detail1] [varchar] (40),
[detail2] [varchar] (40),
CONSTRAINT [PK_RelatedTableA] PRIMARY KEY CLUSTERED
(
[differentID] ASC
)
GO
-- Tables B, C D are pretty much similar to table A
추가 외래 키 SQL :
ALTER TABLE RelatedTableA ADD ID INT
CONSTRAINT fk_refTableX_A FOREIGN KEY (ID)
REFERENCES MainTableX(ID)
GO
-- Same thing with the other related tables
솔루션
나는 외래 키 컬럼 인덱스를 만든
는 테이블 SQL을 작성합니다. 이제 내 쿼리가 다시 빠릅니다. 외래 키 열이 제대로 인덱싱하는 경우
Create nonclustered index IX_RelatedTableA
on RelatedTableA (ID)
GO
"필요하지 않다"는 것은 무엇을 의미합니까? 데이터 무결성을 원하거나 그렇지 않습니다. –
그건 내 프로그램이 그것없이 더 빨리 달렸 기 때문에 내 의견 이었어. 내가 다른 곳에서 실수를 저지르고있을 수도 있습니다. 그래서 제가 도움을 청합니다. – davidXYZ