表:test
列:a,b,c,d,e,f
索引:idx_a_b_c(a,b,c)
a列:過濾因子1%
b列:過濾因子10%
第一顆星,保證最窄的索引片
select a,b,c,d,e,f from test where a=a1 and b=b1 and c = c1
索引idx_a_b_c 滿足了所有的謂詞
where a=a1 and b=b1 and c=c1
idx_a_b_c 為一星索引,但d,e,f 需要回表查詢,所以無法滿足三星
第二顆星,避免排序
select a,b,c,d,e,f from test where a=a1 and b=b1 order by c desc
orselect a,b,c,d,e,f from test order by a desc
索引idx_a_b_c 可以用於排序,索引符合二星,但需要回表,無法滿足三星
第三顆星,避免回表,同時滿足一星,二星
select a,b,c from test where a=a1 and b>b1
idx_a_b_c 可以直接從索引值獲取a,b,c的值,不需要回表,同時 滿足第一顆星
寬索引:避免了回表,的可能不滿足第一顆星
select a,b,c from test where a>1 and b=b1 and c=c1
a 是範圍查詢,b,c索引不在匹配,但是,所有的值可以通過 idx_a_b_c 獲取,而不需要回表查詢
總結
一般而言,如果一和二無法同時實現, 一比二更重要。
更窄的索引片,能減少隨機訪問,而且小資料,在cpu排序,速度是非常快的。
假設每一行處理速度是10us左右 5w行排序 只需要0.5s(當然對於cpu而言,時間太長)
所以對於結果集很大,但只需要產生一屏資料,排序消耗的時間太長,要考慮避免排序
高效能MySQL中的三星索引
我對此提出了深深的疑問 一星 相關的記錄指的是什麼?相關這個詞很深奧,相關部門 是什麼部門 二星 如果建立了b tree b tree 索引,資料就有序了。三星 索引的列包含了查詢需要所有的列?根本不需要在where查詢條件所有的列上建立索引!我認為一星和二星的rows應該是columns,索引不關...
三星記憶體編碼 三星記憶體編號命名揭秘
首先來解釋一下四段號碼的大概含義。a部分我想不用解釋了吧,標明的是生產企業的名稱 samsung b部分說明的是該記憶體模組的生產日期,以三個阿拉伯數字的形式表現。其中第乙個阿拉伯數字表明,生產的年份,後面兩位數字表明是在該年的第 xx周生產的。例如,上圖中的 就該表示該模組是在 年的第周生產的。如...
SQL中的索引設計規範 三星索引
首先要明確,我們平時所說的最左匹配,針對的是索引中的列的順序,與sql語句where後面跟的條件無關。因為語句中的條件謂詞可以隨意調整順序不影響結果,sql優化器會自動幫我們調整順序以使用索引。在索引匹配時,遇到範圍和模糊匹配時終止。select name,age,address,phone,ema...