내 응용 프로그램에는 제품 및 범주가 있습니다. 제품은 여러 범주에 속할 수 있습니다. 따라서 CwObject (제품)와 EntityObjectLink (제품과 범주 간 링크)라는 두 개의 테이블이 있습니다. 나는 많이 사용되는 하나의 쿼리를 가지고 있지만 tweeking 일 후에조차도 매우 느립니다. CwObject에는 약 400K 레코드가 있고 EntityObjectLink에는 1.2M 레코드가 있습니다.매우 느린 쿼리 내부 참여
NONCLUSTERED INDEX [IX_ClusterEntitytypePredecessorStatusClusteraccount]
ON [dbo].[CwObject]([CwObject_CwSiteCluster_Guid] ASC,
[CwObject_EntityType] ASC,
[CwObject_Predecessor_Guid] ASC,
[CwObject_Status] ASC,
[CwObject_ClusterAccount_Guid] ASC)
INCLUDE (% ALL other columns%)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
내가 쿼리를 사용하는 경우 :
PRIMARY KEY CLUSTERED ([EntityObjectLink_LinkedCwEntity_Guid] ASC,
[EntityObjectLink_LinkedCwObject_Guid] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
CwObject
테이블 관련 인덱스가 :
SELECT TOP (99999)
CwObject.*
FROM
CwObject
INNER JOIN
dbo.EntityObjectLink ON CwObject.CwObject_Guid = EntityObjectLink.EntityObjectLink_LinkedCwObject_Guid
WHERE
EntityObjectLink_LinkedCwEntity_Guid = '9a0e41d7-a472-445e-b94f-44fe1a1506b3'
AND CwObject_CwSiteCluster_Guid = '0f178176-9720-41c7-9528-99fdf30005e8'
AND CwObject_EntityType = 1
AND (CwObject_Predecessor_Guid IS NULL)
ORDER BY
CwObject_Name ASC
EntityObjectLink
은 관련 클러스터 된 인덱스가 있습니다
이
쿼리입니다 optimiser는 쿼리가 두 인덱스를 모두 사용한다고 알려줍니다. 그러나 나는 이해하지 못하는 몇 가지를 보았습니다.엔티티 유형 및 predecessorguid에 대한 열 통계가 없다고 경고합니다. 방금 색인을 추가했기 때문일 수 있습니까?
CwObjects
표에서 실제 행과 예상 행을 읽는 것과 큰 차이가 있습니다. 나는 라이브 쿼리 통계를 보면
쿼리는 인덱스 추구 (왜 찾아?)로 CwObjects
에서 171K 기록을 읽습니다. 그런 다음 EntityObjectLink
테이블에서 병합 조인을 수행하여 2.5K 레코드를 읽습니다. 다른 방향으로 돌리는 것이 훨씬 더 효과적이었을 것입니다.
나는 정말로 정말로 여기 붙어 있습니다 ... 누구든지 도와 줄 수 있습니까? 여기
는 실행 계획입니다 : https://1drv.ms/u/s!AlCbN2sexrJ-hNJjeSR9cZPOEpOHwwUPDATE :
AtoStats 몇 시간 이전, ON입니다.
내가cwObjects
테이블에 업데이트 할 통계를 강제 :
는 거의 모든 시간을
업데이트 2 ... 인덱스 CwObject에 추구에서 소비된다. 이것은 큰 차이를 만들었습니다! 쿼리가 거의 10 배 빠릅니다!
('EntityObjectLink_LinkedCwEntity_Guid, CwObject_CwSiteCluster_Guid')에 복합 색인을 추가하고'CwObject_Name'에 다른 색인을 추가하는 것이 좋습니다. –
실행 계획을 게시하십시오 – TheGameiswar
첫 번째 키 열 뒤에 CwObject의 클러스터 된 인덱스에 CwObject_Guid를 추가하려고 시도 했습니까? –