sql server中的hash應用優化

iSQlServer發表於2009-10-22

sql server很多地方用到hash,計劃快取查詢,hash連線,hash聚合等。

hash查詢mssql很多設計中都應用了,不過我們能在開發設計中,也可以利用這個特性。

將如果有需求對大文字進行完全匹配,比如查詢產品型號(較長字串),那麼可以建立一個產品型號的hash欄位,然後在hash欄位上進行查詢,不過最重要的是如果匹配成功,還不要忘記在where上再加一個條件,就是原始產品型號欄位的一致,因為存在極為渺小的可能不同文字能整成一個hash。

hash連線方面,mssql一般都是對於超大資料集而言,對於hash連線的優化,需要區分連線的大小表,以確定構建表和探索表,由於構建表先行,而且hash連線都是超大表的連線,所以需要特別節省記憶體,在hash節省記憶體方面的優化,主要是對於查詢樹的形狀進行規劃,左深度,右深度,濃密度,有時候需要強制定位hash順序,指定構建表,有時候需要跟蹤是不是會被交換到虛擬檔案上,這就需要跟蹤救助演算法。還有如果連線欄位需要檢視統計資訊是否正常,如果不正常導致系統採用hash,就先更新統計,再看看系統是否還整成hash運算子。

hash聚合如果也和連線差不多,主要在於如果聚合欄位分組較少,那麼對hash聚合非常有利,記憶體很省,如果又有排序, 那最好採用流聚合。不過一般情況下除非統計資訊出錯,否則優化器都能正確選擇流聚合和hash聚合。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-617120/,如需轉載,請註明出處,否則將追究法律責任。

相關文章