查詢語句在本質上是一種宣告式的語法,具體執行方式有很多種。
const
refref_or_null
range
index
all有的查詢可以使用索引合併的方式利用多個索引完後查詢。有三種。
intersection索引合併
union索引合併
sort-union索引合併
1.const
有時通過主鍵列或者唯一二級索引列與常數的等值比較來定位一條記錄時,速度飛快,把這種訪問方法定位為const
.若主鍵或者唯一二級索引是多個列組成,只有索引列的每乙個列都與常數進行等值比較時,這個const
訪問方法才有效。
對於唯一二級索引來說,在查詢列為null
值時,比如:
select
*from single_table where
keyis
null
;
因為唯一二級索引並不限制null
的數量,所以上述語句可能會訪問到多條記錄,上述情況不可以使用const
方法來執行。
2.ref
由於普通二級索引並不限制索引列的唯一性,所以在某個掃瞄區間中的二級索引記錄可能有多條,此時使用二級索引執行查詢的代價就取決於該掃瞄區間中的記錄條數。我們把這種「搜尋條件為耳機索引列的與常數進行等值比較,形成的掃瞄區間為單點掃瞄區間,採用二級索引來執行查詢」的訪問方法稱為ref
。
3.ref_or_null
有時,我們不僅想找出某個二級索引列的值等於某個常數的記錄,還想把該列中的值中為null
的記錄也找出來。這種查詢所使用的方法就是ref_or_null
。ref_or_null
訪問方法只是比ref
訪問方法多掃瞄了一些值為null
的二級索引記錄。
4.range
前面提到的都是索引列與某乙個常數進行等值比較。在面對比較複雜的查詢時,如下面這個查詢:
select
*from single_table where key1 in
(1438
,6328)or
(key1 >=
38and key2 <=79)
;
上面查詢語句對應的掃瞄區間是[1438,1438]
、[6328,6328]
、[38,79]
。「使用索引執行查詢時,對應的掃瞄區間為若干個單點或者範圍掃瞄區間」的訪問方法稱為range
。
僅包含乙個單點掃瞄區間和掃瞄區間為5.(-∞,+∞)
的訪問方法不能稱為range
。
index
在使用聯合索引時,聯合索引字段包含查詢列表字段,並且聯合索引的字段又包含搜尋條件中的字段,這個過程不用執行回表操作,直接掃瞄二級索引記錄比直接掃瞄全部的聚簇索引的成本要小很多。這種掃瞄方法稱為index
訪問方法。
6.all
對於直接掃瞄全部的聚簇索引記錄的方法稱為all
訪問方法。
索引合併(mysql
為多個索引形成掃瞄空間)
7.intersection
索引合併
當乙個搜尋條件中涉及多個索引。intersection
索引合併指的就是從不同索引中掃瞄到的記錄的id值取交集,只為這些id執行回表操作。
8.union
索引合併
當乙個搜尋條件中涉及多個索引。union
索引合併指的就是從不同索引中掃瞄到的記錄的id值取並集,根據二級索記錄的id值在兩者的結果中去重,根據去重後id執行回表操作。
9.sort-union
索引合併
sort-union
索引合併只比union
索引合併多了一步對二級索引記錄的主鍵值進行排序的過程。
《Mysql是怎樣執行的》讀書筆記三
將字元對映成二進位制的過程叫做編碼,將二進位制對映成字元的過程叫做解碼。我們看一下常用字符集的情況 ascii字符集 共收錄128個字元,包括空格 標點符號 數字 大小寫字母和一些不可見字元。iso 8859 1字符集 共收錄256個字元,它在ascii字符集的基礎上有擴充了128個西歐常用字元。g...
《Mysql是怎樣執行的》讀書筆記之成本的優化
在mysql中,乙個查詢的執行成本是由i o成本和cpu成本組成的,對於innodb儲存引擎來說,讀取乙個頁面的i o成本預設是1.0,讀取以及檢測一條記錄是否符合搜素條件的成本預設是0.2。在單錶查詢中,優化器生成執行計畫的步驟一般如下。在優化器生成執行計畫的過程中,需要依賴一些資料,這些資料可能...
讀書筆記 網路是怎樣連線的
一 電訊號傳輸tcp ip資料 三 接入網 1 adsl 不對稱數字使用者線,上行速率和下行速率不同 2 ftth 光纖到戶 3 pppoe 乙太網的點對點協議,將ppp訊息裝入乙太網包的方式進行傳輸的方式 4 bas 寬頻接入伺服器 5 網際網路接入路由器通過pppoe的發現機制查詢bas的mac...