sql server很多地方用到hash,計畫快取查詢,hash連線,hash聚合等。
hash查詢mssql很多設計中都應用了,不過我們能在開發設計中,也可以利用這個特性。
將如果有需求對大文字進行完全匹配,比如查詢產品型號(較長字串),那麼可以建立乙個產品型號的hash欄位,然後在hash欄位上進行查詢,不過最重要的是如果匹配成功,還不要忘記在where上再加乙個條件,就是原始產品型號欄位的一致,因為存在極為渺小的可能不同文字能整成乙個hash。
hash連線方面,mssql一般都是對於超大資料集而言,對於hash連線的優化,需要區分連線的大小表,以確定構建表和探索表,由於構建表先行,而且hash連線都是超大表的連線,所以需要特別節省記憶體,在hash節省記憶體方面的優化,主要是對於查詢樹的形狀進行規劃,左深度,右深度,濃密度,有時候需要強制定位hash順序,指定構建表,有時候需要跟蹤是不是會被交換到虛擬檔案上,這就需要跟蹤救助演算法。還有如果連線字段需要檢視統計資訊是否正常,如果不正常導致系統採用hash,就先更新統計,再看看系統是否還整成hash運算子。
hash聚合如果也和連線差不多,主要在於如果聚合字段分組較少,那麼對hash聚合非常有利,記憶體很省,如果又有排序, 那最好採用流聚合。不過一般情況下除非統計資訊出錯,否則優化器都能正確選擇流聚合和hash聚合。
SQL Server 2005 hash聯接演算法
如果兩個聯接輸入都很大,而且這兩個輸入的大小差不多,則預先排序的合併聯接提供的效能與雜湊聯接相近。但是,如果這兩個輸入的大小相差很大,則雜湊聯接操作通常快得多。雜湊聯接可以有效處理未排序的大型非索引輸入。它們對複雜查詢的中間結果很有用,因為 中間結果未經索引 除非已經顯式儲存到磁碟上然後建立索引 而...
SQL Server 2005 hash聯接演算法
如果兩個聯接輸入都很大,而且這兩個輸入的大小差不多,則預先排序的合併聯接提供的效能與雜湊聯接相近。但是,如果這兩個輸入的大小相差很大,則雜湊聯接操作通常快得多。雜湊聯接可以有效處理未排序的大型非索引輸入。它們對複雜查詢的中間結果很有用,因為 中間結果未經索引 除非已經顯式儲存到磁碟上然後建立索引 而...
SQL Server 2005 hash聯接演算法
如果兩個聯接輸入都很大,而且這兩個輸入的大小差不多,則預先排序的合併聯接提供的效能與雜湊聯接相近。但是,如果這兩個輸入的大小相差很大,則雜湊聯接操作通常快得多。雜湊聯接可以有效處理未排序的大型非索引輸入。它們對複雜查詢的中間結果很有用,因為 中間結果未經索引 除非已經顯式儲存到磁碟上然後建立索引 而...