2011-09-08 6 views
1

나는 performane 문제가 있습니다. 관리자가 선택 진술을 조정하라고했습니다.성능 튜닝

우리는 29,000 레코드 포함 된 테이블

SELECT [AcctDetailReportId] 
     ,[WorkOrderEneteredDate] 
     ,[LocationName] 
     ,[LocationNumber] 
     ,[District] 
     ,[CostCenter] 
     ,[GLCode] 
     ,[WorkType] 
     ,[RequestType] 
     ,[RequestCode] 
     ,[ServiceLocation] 
     ,[Cause] 
     ,[Remedy] 
     ,[RequestDescription] 
     ,[CreatedBy] 
     ,[Priority] 
     ,[WorkOrderNumber] 
     ,[Status] 
     ,[DNE] 
     ,[InvoiceNumber] 
     ,[VendorCode] 
     ,[VendorName] 
     ,[Quote1] 
     ,[Quote2] 
     ,[Invoiceid] 
     ,[InvoiceSubmittedDate] 
     ,[WorkComplete] 
     ,[TotalLaborCost] 
     ,[TotalMaterialCost] 
     ,[SalesTax] 
     ,[InvoiceTotal] 
     ,[WarrantyExpirationDate] 
     ,[UnderWarranty] 
     ,[MallName] 
     --,[AddressID] 
     --,[CommunicationID] 
     --,[ContactID] 
     --,[StateID] 
     --,[CountryID] 
     --,[LanguageID] 
     --,[AddressTypeID] 
     ,[Line1] 
     ,[Line2] 
     ,[City] 
     ,[Province] 
     ,[Region] 
     ,[ZipPostalCode] 
     --,[DeactivateDateTime] 
     --,[DeactivateUser] 
     ,[CreateDateTime] 
     ,[CreateUser] 
     --,[PreviousRecordID] 
     ,[LocationState] 
     ,[CheckNumber] 
     ,[CheckDate] 

FROM [Darden].[dbo].[RPT_AccountDetailReport] 
GO" 

을 가지고있다. 클러스터 된 인덱스 스캔을 사용하여 데이터를 검색하는 데 약 2 분이 걸립니다.

테이블에는 클러스터형 인덱스가 하나만 있습니다.

요구 사항이

이 하나가 나를 도울 수 .. .. 그러나 감소 된 시간에 테이블의 모든 기록과 모든 열을 얻을 것입니다 ...

감사합니다,

KARTHIK

+4

HTH, LarryR .... 당신은 기본 SQL을 보여줄 수 있습니까? – RedFilter

+1

관리자는 29,000 개의 모든 행을 어떻게 처리합니까? –

+0

RPT_AccountDetailReport는보기가 아닙니다. 테이블입니다 ... "RPT_AccountDetailReport에서"* 선택하여 RPT_AccountDetailReport에서 성능을 향상시킬 필요가 있습니다. – user922161

답변

0

인덱스를 재구성/재구성 했습니까? i.name = '% 무엇을 여기에 넣었습니까?'라는 테이블의 모든 인덱스를 다시 만들거나 만들려면 스크립트에서 스크립트를 작성합니다. 그 밑에는 내가 과거에 사용했던 여러 줄들이 있습니다.

SELECT 
--stats.object_id AS objectid, 
--QUOTENAME(s.name) AS schemaname, 
--stats.index_id AS indexid, 
i.name AS index_name, 
--stats.partition_number AS partitionnum, 
stats.avg_fragmentation_in_percent AS frag, 
stats.page_count, 
QUOTENAME(o.name) AS objectname, 
CASE 
     when stats.avg_fragmentation_in_percent < 30 then 'Reorganize' 
     when stats.avg_fragmentation_in_percent > 30 then 'Rebuild' 
END AS 'action_to_take', 
CASE 
     when stats.avg_fragmentation_in_percent < 30 then 'ALTER INDEX '+i.name+ ' ON ' +DB_NAME()+'.'+QUOTENAME(s.name)+'.'+QUOTENAME(o.name)+' REORGANIZE;' 
     when stats.avg_fragmentation_in_percent > 30 then 'ALTER INDEX '+i.name+ ' ON ' +DB_NAME()+'.'+QUOTENAME(s.name)+'.'+QUOTENAME(o.name)+' REBUILD;' 
END AS 'Statement' 
FROM 
sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL , NULL, NULL) as stats, 
sys.objects AS o, 
sys.schemas AS s, 
sys.indexes AS i 
WHERE o.object_id = stats.object_id 
AND s.schema_id = o.schema_id  
AND i.object_id = stats.object_id 
AND i.index_id = stats.index_id 
AND i.name is not null and i.name not like '%missing index%' 
AND stats.avg_fragmentation_in_percent >= 10.0 
--AND stats.page_count >= 5000 
--AND stats.index_id > 0 
--and i.name like '%880%' 
ORDER BY action_to_take,stats.avg_fragmentation_in_percent desc,stats.page_count desc 

아니면 표시를 클릭하면 [추정] 실행 계획 & SMS는 필요한 모든 인덱스를 생성합니다. 나는`RPT_AccountDetailReport`이 도면이다 추측하고

+0

좋은 codez. 나는 그걸 구할 것이다. – iandisme

+0

질문을 읽었습니까? 그는 필터없이 테이블에서 모든 데이터를 선택합니다. 클러스터되지 않은 인덱스를 추가하거나 다시 작성하면 도움이되지 않습니다. – JNK

+0

그렇습니다. 내가 말하려고하는 것이 있습니다. 클러스터되지 않은 인덱스를 추가하면 아무런 영향을 미치지 않습니다. – user922161