【摘抄】
建立索引的目的是快速從整體集合中選擇性讀取滿足條件的一部分集合。
查詢條件中有縮減查詢範圍起主要作用的驅動查詢條件,也有單純起檢驗作用的過濾查詢條件。
最理想的方法就是把擁有最小查詢範圍的條件作為驅動查詢條件來使用。
對於特定的讀取型別,最有效的索引就是基於常量比較的列來建立的組合索引。
問題的核心不在於建立了多少索引,而是建立的索引是否能夠充分的發揮最大的作用。判斷其作用的依據會隨著其縮減查詢範圍的有效程度而不同,離散度就是對該判斷有著直接影響的重要因素。
somebooks多次提及:離散度在不超過全表的10%-15%的前提下索引才可以顯示其具有的價值。換言之,索引列的離散度為10%-15%的深層意思是,當離散度超過該值的情況下全表掃瞄可能反倒比索引掃瞄更有效。
損益分界點是在利用索引讀取滿足條件的全部資料的情況下所使用的準則,即,在讀取滿足條件的行時索引掃瞄和全表掃瞄的損益。
如何檢視索引列的離散度??
現在還是沒有找到可觀察的手段
細想一下,在一定量的資料上,才能有此更大的比較~
實在不行,可以這麼測試:
建兩個庫,乙個完全無索引;乙個根據實際設定索引內容
執行相同的sql來比較,來歸納離散度在此的應用
當然,在小資料上這個是完全看不到效果,大資料又是好大,這個需要實踐來得出。
希望後續的閱讀能解決今天的問題。
《海量資料庫解決方案》2011051901
摘抄 表連線的最優化方案 表連線,這裡指狹義的join,是連線資料的最基本方法。表連線方式 a 巢狀迴圈表連線nested loops 既是最傳統的表連線方式,也是最普遍的表連線方式 通過優先許可權處理某個集合來從中獲取常量值,並利用該常量值去對應的集合中查詢滿足連線條件的對應行,所連線數量的多少會...
《海量資料庫解決方案》2011051301
摘抄 表連線的最優化方案 反覆連線方式 之後用於連線 query 的sql要以以前從基表中所讀取的行為基準而被反覆 loop 執行 文中比較nested loops和反覆連線方式,結論是反覆連線方式類似nested loops,只是前者會出現沒有設計出正確的表連線方向 集合順序 而影響了join的速...
《海量資料庫解決方案》2011050301
摘抄 提高區域性範圍掃瞄執行速度的原理 書中提及乙個概念 無條件查詢,按字面理解就行了。如 select from tb 後面不帶任何查詢語句之類的。在書中所說,select from tb order by item 前者可能執行區域性範圍掃瞄,後者執行屬於全部範圍掃瞄 以上,針對的是oracle...