SQL Server調優實戰 亂建聚集索引的後果
有一個基於時間欄位上的時間段where範圍選擇,然後聚合找到某些型別的聚合值。
觀察發現自增列欄位就是一個擺設,沒有任何作用,也不做任何表的外來鍵,只是可能當時開發人員在設計表的時候就不管3721都來一個自增列主鍵,導致在對date欄位上的非聚集索引掃描後,還需要去聚集索引樹上seek一下,這下子就增加一個巢狀查詢了。去掉表上的主鍵聚集索引,將表迴歸為堆,這樣在非聚集索引掃描後直接就拿到RID找相應行了。
後來又想辦法整了個date欄位上的include索引,將要彙總的欄位都加到非聚集索引上來,連RID查詢都不要了。include雖然增加磁碟開銷,但是速度上去很多,且沒有針對索引的更新,不涉及索引拆分等費時操作,所以覺得還是值得。
最後優化結果,由45秒到20秒。
優化結果還比較滿意,最後最重要的是因為IO始終將不下來,因為資料太多了。
不知道還有沒有辦法能想想的。
其實以前自己在設計資料庫的時候也經常對錶開始就來一個主鍵,而並沒有考慮其實際意義,導致表的操作非常困難。
這個日誌型別的表基本不需要自增主鍵欄位,他不會根據某一日誌ID範圍來查詢或者更新日誌。
但在優化的時候有個問題覺得很奇怪:
4000萬的資料,查詢其中的2萬條,根據日期上的過濾,我想應該是一個巢狀的書籤查詢計劃,結果看到MSSQL給出的答案卻是聚集索引掃描。4000萬比2萬的資料,卻寧願表掃描而不願意做巢狀?只有指定了使用非聚集索引後查詢計劃才改成巢狀的書籤查詢。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-591030/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server索引 - 非聚集索引SQLServer索引
- SQL Server 聚集索引和非聚集索引的區別SQLServer索引
- [zt] 聚集索引和非聚集索引(sql server索引結構及其使用)索引SQLServer
- SQL Server 深入解析索引儲存(聚集索引)SQLServer索引
- SQL Server 深入解析索引儲存(非聚集索引)SQLServer索引
- SQL Server 索引和表體系結構(聚集索引)SQLServer索引
- SQL Server 索引和表體系結構(非聚集索引)SQLServer索引
- SQL Server 2008 建立非聚集索引SQLServer索引
- MySQL調優篇 | SQL調優實戰(5)MySql
- 從效能的角度談SQL Server聚集索引鍵的選擇SQLServer索引
- SQL Server 2008 非聚集索引設計SQLServer索引
- MySQL索引和SQL調優MySql索引
- [轉]聚集索引和非聚集索引的區別索引
- 使用聚集索引和非聚集索引的區別索引
- SQL Server調優系列進階篇(如何維護資料庫索引)SQLServer資料庫索引
- Sql Server之旅——第三站 解惑那些背了多年聚集索引的人SQLServer索引
- SQL Server一次SQL調優案例SQLServer
- MySQL 索引和 SQL 調優總結MySql索引
- Sql Server之旅——第四站 你必須知道的非聚集索引掃描SQLServer索引
- 又一個複合索引的SQL調優索引SQL
- mysql關於聚集索引、非聚集索引的總結MySql索引
- 測試sql server全文索引,結果遇到問題SQLServer索引
- mysql優化 | 儲存引擎,建表,索引,sql的優化建議MySql優化儲存引擎索引
- SQL Server效能調優札記 [zt]SQLServer
- 我如何調優SQL Server查詢SQLServer
- sql調優一例---索引排序hintSQL索引排序
- MySQL——索引優化實戰MySql索引優化
- 實戰 nginx 調優Nginx
- 效能調優實戰
- Hive調優實戰Hive
- SQL Server索引優化系列之二:索引效能考慮 (轉)SQLServer索引優化
- 記一次SQL Server刪除SQL調優SQLServer
- MS SQL SERVER索引優化相關查詢SQLServer索引優化
- 關於索引掃描的極速調優實戰(第二篇)索引
- SQL優化思路&結果集重用優化、分割槽索引優化測試SQL優化索引
- SQL調優真實案例SQL
- 數倉調優實戰:GUC引數調優
- 軟體開發人員真的瞭解SQL索引嗎(聚集索引)SQL索引