2011-09-08 70 views
1

我有一个性能问题。我的经理说我调整选择的声明。性能调整

我们正处于一个表

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" 

其中包含29000条记录。使用聚簇索引扫描检索数据需要大约2分钟..

表只有一个聚簇索引。

要求是让表中的所有记录和所有列。但在缩短的时间..

任何一个可以帮助我对...

感谢,

KARTHIK

+4

我猜测'RPT_AccountDetailReport'一种观点。你能显示底层的SQL吗? – RedFilter

+1

你的经理要做什么29000行? –

+0

RPT_AccountDetailReport不是一个视图,它是一个表......需要提高“select * from 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将生成任何所需的索引。

HTH, LarryR ....

+0

不错的codez。我会救那个。 – iandisme

+0

你读过这个问题了吗?他从没有过滤器的表中选择所有数据。添加或重建非聚集索引将无济于事。 – JNK

+0

是这就是我想说的..添加一个非聚集索引不会有任何影响.. – user922161