13.查詢成本的計算(gold_axe)

執(zhí)行計劃:成本最低的方案
possible key: 查詢中可能用到的索引

CREATE TABLE single_table (
    id INT NOT NULL AUTO_INCREMENT,
    key1 VARCHAR(100),
    key2 INT,
    key3 VARCHAR(100),
    key_part1 VARCHAR(100),
    key_part2 VARCHAR(100),
    key_part3 VARCHAR(100),
    common_field VARCHAR(100),
    PRIMARY KEY (id),

    KEY idx_key1 (key1),//
    UNIQUE KEY uk_key2 (key2),//唯一索引
    KEY idx_key3 (key3),//
    KEY idx_key_part(key_part1, key_part2, key_part3)//

) Engine=InnoDB CHARSET=utf8;

單表查詢

查詢例句:

SELECT * FROM single_table WHERE 
    key1 IN ('a', 'b', 'c') // idx_key1 
AND 
    key2 > 10 AND key2 < 1000// uk_key2
 AND 
    key3 > key2 // 不可能用到索引
AND 
    key_part1 LIKE '%hello%' //不可能用到索引
AND
    common_field = '123';//不可能用到索引

possible key:idx_key1,uk_key2

查詢成本 有2種,
I/O成本:加載到內(nèi)存的成功
CPU成本:讀取,檢測記錄是否滿足,對結(jié)果排序

mysql為每個表維護了統(tǒng)計信息, 有 Rows(大概幾行) Data_length(基礎索引多大,單位B)
一頁16k,因此能算出聚簇索引有幾頁
這里假設97頁,9693行

現(xiàn)在計算比較上一個查詢成本:

  • 全表掃描成本 估算

I/O成本: 97(總頁數(shù))*1(I/O成本參數(shù)默認,可調(diào))+1.1(微調(diào)值不用管)
CPU成本: 9693(行)* 0.2(成本常數(shù))+1.0(微調(diào)值)

雖然,聚簇索引只有最下層的葉子節(jié)點是真的放著數(shù)據(jù), 只要沿著最下層的雙向鏈表 從左往右就能遍歷了, 實際是不用遍歷內(nèi)節(jié)點的, 這里的估算比較粗暴, 但是就是這么估的

  • 用唯一索引 uk_key2 的成本估算

key2 > 10 AND key2 < 1000

1.把這個區(qū)間的二級索引全部讀入磁盤, 的I/O成本 是1

就是查(10,1000)區(qū)間, 估算時 查詢優(yōu)化器認為, 一個區(qū)間的I/O成本 就是讀取一頁的成本

2.從中拿到主鍵id, 查看一條成本0.2
首先要沽出(10,1000)區(qū)間大概有幾條記錄(肯定少于1000-10),如果最左和最右相隔不遠,就直接得出精確值,不然的話 平均每個頁幾條(統(tǒng)計左邊10頁) * 左右間有幾頁(往上找共同父節(jié)點)

注意: 這樣直接去訪問樹, 來估算條數(shù),叫index dive
真的去訪問了, 這樣這個得到估算值的本身的動作,就會產(chǎn)生成本
為了不讓這個為了估算產(chǎn)生的成本太大, 如果 in(參數(shù)) 參數(shù)多于200就不用index dive, 而是直接:
Rows/Cardinality來估算條數(shù)
Rows: 統(tǒng)計的大概行數(shù)
Cardinality:基數(shù),表示重復程度的,1是完全相同,和行數(shù)相等是每行都不相等
這種估算代價小,但是不怎么精確

這里假設是95
95 * 0.2 +0.01=19.01
3.憑著符合key2 > 10 AND key2 < 1000 的id 去聚簇索引拿到完整一條的記錄(忽略不計), 主要是 查看對其他查詢條件的滿足(key1 IN ('a', 'b', 'c'), key3 > key2,key_part1 LIKE '%hello%' ,common_field = '123' 這些)
95*0.2

  • 普通二級索引 idx_key1 的成本估算

key1 IN ('a', 'b', 'c')

  1. 把3個單點區(qū)間讀入磁盤, 還是和上文說的一樣,一個區(qū)間當一頁算
    3*1
  2. 同上, 查看1讀入的數(shù)據(jù)拿到id, 需要先估滿足條件的有幾條(不是三條哦.key1不限制值不能相同), 和上文一樣估, 這里即使一共118條件
    118*2+0.01
    3.同上, 用id回表(忽略不計), 查看完整的記錄,應用其他篩選條件
    118*0.2=23.6

這里明顯不能 Index Merge (idx_key1,uk_key2 并行查詢?nèi)缓蠛喜?), 因為二級索引是等值查詢 是必要條件 (因為取交集必須是id是有序的取交集才快)

連接查詢的成本

成本= 訪問驅(qū)動表+ 驅(qū)動表扇出數(shù)* 單詞訪問被驅(qū)動表成本

扇出數(shù)的計算 叫 Condition filtering
主要靠猜, 沒有篩選條件, 直接用驅(qū)動表的統(tǒng)計的大概Rows, key2 > 10 AND key2 < 1000 和上文說的一樣 index dive

外連接的最優(yōu)查詢方案: 分別選擇最優(yōu)訪問方法
外連接的最優(yōu)查詢方案:還要選擇驅(qū)動順序

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翘悉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子载慈,更是在濱河造成了極大的恐慌窿撬,老刑警劉巖臀稚,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涕蚤,居然都是意外死亡卵酪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門熙掺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來未斑,“玉大人,你說我怎么就攤上這事币绩±啵” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵缆镣,是天一觀的道長载城。 經(jīng)常有香客問我,道長费就,這世上最難降的妖魔是什么诉瓦? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮力细,結(jié)果婚禮上睬澡,老公的妹妹穿的比我還像新娘。我一直安慰自己眠蚂,他們只是感情好煞聪,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逝慧,像睡著了一般昔脯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笛臣,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天云稚,我揣著相機與錄音,去河邊找鬼沈堡。 笑死静陈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的诞丽。 我是一名探鬼主播鲸拥,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼僧免!你這毒婦竟也來了刑赶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤懂衩,失蹤者是張志新(化名)和其女友劉穎撞叨,沒想到半個月后呛伴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡谒所,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沛申。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劣领。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铁材,靈堂內(nèi)的尸體忽然破棺而出尖淘,到底是詐尸還是另有隱情,我是刑警寧澤著觉,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布村生,位于F島的核電站,受9級特大地震影響饼丘,放射性物質(zhì)發(fā)生泄漏趁桃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一肄鸽、第九天 我趴在偏房一處隱蔽的房頂上張望卫病。 院中可真熱鬧,春花似錦典徘、人聲如沸蟀苛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帜平。三九已至,卻和暖如春梅鹦,著一層夾襖步出監(jiān)牢的瞬間裆甩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工齐唆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淑掌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓蝶念,卻偏偏與公主長得像抛腕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子媒殉,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容