亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysql innodb 索引查詢的一個疑問?

mysql innodb 索引查詢的一個疑問?

德瑪西亞99 2018-10-01 10:11:37
假設有這么個sql查詢 select * from table where id=xxxx order by time這張table上有兩個索引,一個是id聚集索引,還有一個是time非聚集索引。那么我們假設強制它走time非聚集索引,那么執行這個sql的第一步就是直接把排序好的葉子節點拿出來。這個葉子節點的data域存放的是主鍵名,即id。那么問題來了,接下來要匹配where條件了,是直接在time索引的葉子節點的data域上來where匹配id,還是拿到id再去通過主鍵索引拿到行數據來where匹配id呢?思考:select * from table where time=xxxx order by time ,會怎么樣?如果上面那個問題的答案是前者(直接在time索引的葉子節點的data域上來where匹配id),那這句sql和上面那句sql的查詢效率應該是差不多的?
查看完整描述

2 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

EXPLAIN 

SELECT `id`

FROM `table`

FORCE INDEX(`idx_time`)

WHERE `id`=xxx

    ORDER BY `time`

看Extra有Using index,說明在索引內部完成了查詢,也就是不需要回表查詢

2條sql語句,不明白為什么要比較效率,第一條走主鍵效率肯定高;第二條語句,可能會掃描索引idx_time


查看完整回答
反對 回復 2018-10-09
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

怎么查看你查什么
第一條sql會在time索引找到滿足where條件的id,然后拿著id去主鍵聚集獲取其他字段
第二條同樣是在time索引上找到滿足where條件的id,然后再去獲取其他數據
不同的是,第一種情況會遍歷所有的time索引段,第二種只需要檢索滿足條件的time索引段即可

查看完整回答
反對 回復 2018-10-09
  • 2 回答
  • 0 關注
  • 860 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號