激情欧美日韩一区二区|国产18在线播放|黄的日本免费大片|国产色在线 | 亚洲|青青操夜夜操

Sql Server數據庫優化的一些高級方法

歡歡歡歡 發表于 2018-3-22 09:22
1:通過下列語句, 查找比較耗資源的查詢,將列表中提到的equality_columns和inequality_columns建成索引。
SELECT TOP 50
  ROUND(s.avg_total_user_cost * s.avg_user_impact * (s.user_seeks + s.user_scans),0) AS [Total Cost]
,  s.avg_user_impact
,  d.statement AS TableName
,  d.equality_columns
,  d.inequality_columns
,  d.included_columns
FROM sys.dm_db_missing_index_groups g
  INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle
  INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle
ORDER BY [Total Cost] DESC
創建索引的Sql:
CREATE NONCLUSTERED INDEX [索引名] ON [dbo].[t_ShopSerWaiter]
(
[SerElementCode] ASC, [Status] ASC, [DeleFlag] ASC,
[SerLogCode] ASC ,
[SaleType] ASC,
    [UserCode] ASC,
[ShopCode] ASC, [CreateTime] ASC
)WITH (ONLINE = off) ON [PRIMARY]
GO
2:用語句清理索引碎片,設置填充因子(FILLFACTOR)。
查詢數據庫索引碎片情況的語句:
 
SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName, 
ind.name AS IndexName, indexstats.index_type_desc AS IndexType, 
indexstats.avg_fragmentation_in_percent 
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats 
INNER JOIN sys.indexes ind  
ON ind.object_id = indexstats.object_id 
AND ind.index_id = indexstats.index_id 
WHERE indexstats.avg_fragmentation_in_percent > 50 
ORDER BY indexstats.avg_fragmentation_in_percent DESC
 
清理索引碎片有四種方式:
1)刪除并重建
2)使用 DROP_EXISTING 語句重建索引
3)使用 ALTER INDEX REBUILD 語句重建索引
4)使用 ALTER INDEX REORGANIZE 重新組織索引
 
重新組織和重新生成索引:摸這里
參考文檔:摸這里
 
查看填充因子---》索引-右鍵-碎片-頁填充度
 
填充因子大的時候,插入或修改記錄后重新索引的工作會很大,磁盤IO操作增加,性能必然降低,但其占用空間小.填充因子小的時候,索引文件占用磁盤及內存空間相對要大,但是,系統本身重新索引所需IO操作減少,性能提高,只是多占用一些存儲空間. 孰輕孰重要自已決定。
 
通常只有當不會對數據進行更改時(例如,在只讀表中)才會使設置100%。另外,只有當在表中根據現有數據創建新索引,并且可以精確預見將來會對這些數據進行哪些更改時,將填充因子選項設置為另一個值才有用。所以填充因子不是很容易設置的。
 
參考文檔:摸這里
如何設置固定的填充因子(全局性的):摸這里
為索引指定填充因子:摸這里
 
該示例重新生成現有索引,并在重新生成操作過程中應用指定的填充因子。
Transact-SQL語句:
	USE AdventureWorks2012;
GO
-- Rebuilds the IX_Employee_OrganizationLevel_OrganizationNode index 
-- with a fill factor of 80 on the HumanResources.Employee table.

ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee
REBUILD WITH (FILLFACTOR = 80); 
GO

設置一個表中的所有索引的因子:
		ALTER INDEX ALL ON dbo.t_GoodsSale REBUILD WITH(FILLFACTOR=90)
進階(深層次的介紹和示例):摸這里 3:設置數據庫最大并行度: 設置方法:右鍵數據庫---》屬性-----》高級-----》最大并行度 這是設置同時可以使用的CPU的核數量,防止CPU被某一個請求占用到100%。