標籤:
http://blog.chinaunix.net/uid-259788-id-4146363.html
http://www.cnblogs.com/Amaranthus/p/4028687.html MYSQL 5.6手冊
http://www.cnblogs.com/hustcat/category/214566.html YY哥
http://blog.163.com/li_hx/blog/static/18399141320150253652874/ 那海藍藍
http://tech.it168.com/a2013/0506/1479/000001479749.shtml
http://www.server110.com/mariadb/201310/2245.html
1. mrr
mrr_cost_based
這個是從MySQL 5.6 開始增加的開關。 意思是針對普通索引把資源利用最大化,主要是針對多列索引,也叫複合式索引來做基本掃描,然後對匹配的記錄按照主鍵排序,這樣按照有序的主鍵順序從磁碟上掃描需要的全部記錄。根本功能是把對磁碟的隨機掃描轉化為順序掃描。
主要針對的是資料太大,放不到CACHE裡面(比如INNODB,或者MYISAM)。 目前對全索引掃描意義不大。
2. batched_key_access
(在JOIN BUFFER POOL裡)當內表被掃描後,針對掃描到的記錄,找到對應的主索引值並且一次**給MRR介面。省掉了頻繁跟磁碟互動的IO部分。
3. block_nested_loop
(在JOIN BUFFER POOL裡)當內表被掃描後,針對原來的記錄加上一個是否匹配標記,產生新的記錄。這樣下次外表的值如果再來遍曆內表,就只掃描不匹配的即可。省掉部分CPU資源。
4. index_condition_pushdown
不開啟: 對於複合式索引(A,B)來說,如果A可以用到索引,B不能用到,那麼只能在索引樹上找到A,然後再用A對應的指標到磁碟上遍曆資料。
開啟後: 同樣對於複合式索引(A,B)來說,如果A可以用到索引,B不能用到,那麼在索引樹上找到A,然後再通過B的過濾條件在索引樹上進行過濾,刪選後的指標到磁碟上遍曆資料。
但是ICP並不能把隨機掃描變為順序掃描,只是減少了對磁碟互動的IO部分。
http://blog.csdn.net/wang1518037965/article/details/46550807
5. use_index_extensions
主要用於INNODB的第二索引,也就是普通的索引,把索引中包含的主索引值利用到。比如主鍵為(a,b),索引為(c). 如果用到了索引c,那麼把索引變成(c,a,b) 這樣,就可以用到新的複合式索引了。
不過這種場合用的也比較少,一般是根據組合主鍵中的第一個欄位和普通索引一起來做檢索的時候。
6. semijoin
表示在串連的時候內表去重的過程 。
比如對以下的查詢,a.class_id 就只需要掃描一次和b.id相同的記錄就可以不在繼續了。因為不需要關心b表裡面是否有多少相同的class_id,只需要知道有還是沒有就行了。
所以一般用在對子查詢的最佳化居多。
http://www.cnblogs.com/xiaotengyi/p/3908347.html
http://www.linuxidc.com/Linux/2015-05/117523.htm
7. firstmatch
只選用內表的第一條與外表匹配的記錄。
8. loosescan
把內表的資料基於索引分組,取每組第一條資料即可。
9. materialization
subquery_materialization_cost_based
把內表去重然後產生有對應索引的暫存資料表(有點類似其他資料中的物化視圖),然後通過外表的對應索引值遍曆這張暫存資料表。
主要針對不能抓華為半串連的檢索類型。
MySQL 5.6 SQL 最佳化特性