前言

我在給客戶調優的時候,發現很多客戶對資料庫索引有一種誤解。他們認為索引我們也知道啊,我也會建。調整下索引對系統性能不好有很好的提升。但實際上,等優化有結果對比發現,就是調整索引,讓系統性能,有了5倍,10倍的提升。關于索引的使用,我有一些經驗,但是覺得還是有很多需要學習的地方。 我會結合《microsoft sql server 2012 internals》 這本書的,和我自己的了解分享下這邊書的内容。如果有必要可能會增加一些實際的案例,通過此方法,希望鞏固自己的知識的同時,學習新的東西。
正文
SQL Server沒有一個配置選項或旋鈕,可以直接使您能夠運作得更快。然而,建立和設計适當的索引可能是最接近于靈丹妙藥的東西。為正确查詢建立的正确索引可以将查詢執行時間從幾小時縮短到幾秒。絕對沒有其他方法可以看到同等的收益;新增硬體或調整配置選項通常隻會帶來邊際收益。那麼索引可以使查詢請求從數百萬的I/O下降到隻有幾個呢?任何索引都能提高性能嗎?不幸的是,良好的性能不會平白無故的發生,所有的索引都不是平等的,并且也不是所有索引都能提高性能。事實上,過度索引可能比不加索引性能更差。你不能簡單粗暴的對每個列進行索引,并期望SQLServer改進。
那麼,如何建立最佳索引呢?答案并不簡單,需要考慮的東西很多。
了解您的資料分布,了解您的工作負載,了解SQL Server是如何工作的。 SQL Server涉及多個元件:索引内部、統計、查詢優化和維護。 本章重點介紹索引内部和維護,擴充這些主題,以提供索引建立和最佳索引政策的最佳實踐 通過了解SQL Server如何實體地存儲索引以及存儲引擎如何通路和操作這些實體結構,您可以更好地建立正确的索引
SQL Server 2012為索引提供了兩種完全不同的存儲類型。
1.索引可以被存儲在一個特殊的樹狀結構,稱為B-樹。
2.每個索引列可以存儲在它自己的部分,在一個結構叫做columnstore索引。
第一部分說明了B樹索引的使用和概念,以及索引存儲内部。學習索引是如何組織在磁盤上的。以及它們是如何用于資料檢索的。
第二部分深入讨論資料修改時發生的情況,以及SQL Server如何保證一緻性。在B樹索引的資料修改的帶來的潛在影響,如碎片。
第三部分讨論了索引管理和維護。
第四部分介紹columnstore 列存儲索引、SQL Server 2012中的新增的,它的存儲和管理和B-Tree索引完全不同
總結
覺得不錯歡迎點贊,并留言