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

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

InnoDB全表掃描是不是有可能比MyISAM快?

InnoDB全表掃描是不是有可能比MyISAM快?

MMTTMM 2019-05-20 10:06:35
MySQLInnoDB存儲引擎當索引(二級)生效時,會先走二級索引,然后走聚簇索引找到數據那如果索引不生效時,要做全表掃描時,還會走聚簇索引么?我理解的是會走,因為InnoDB的數據和聚簇索引是一體的那如果Innodb的全表掃描會走聚簇索引的話,而MyISAM不走,那是不是走索引的比不走索引的要快呢?想知道InnoDB全表掃描時如何走聚簇索引的?
查看完整描述

2 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

首先要明確的是,聚簇索引不是一種單獨的索引類型,而是一種數據存儲方式,各個引擎的實現可能不太一樣。
對于InnoDB而言,如果表有聚簇索引,它的數據行數據實際上就存放在主鍵索引的葉子頁中。也就是說,可以直接通過主鍵索引獲取到行數據。這就是InnoDB的聚簇索引。
對于題主的描述1、在有聚簇索引時,二級索引生效后,實際上是通過二級索引找到對應主鍵,然后通過主鍵索引找到存放的數據。2、索引不生效,用不到主鍵索引,就不會使用主鍵上聚簇的行數據。3、不使用任何索引,走全表掃描的話,理論上來講,如果表有1000行數據,都需要1000次IO操作,也就不用比較誰快誰慢了。
如有疑惑,歡迎進一步探討,望采納!
                            
查看完整回答
反對 回復 2019-05-20
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

老鐵,首先你要弄清楚什么是innodb,什么是myisam哦innodb表的數據本身就是聚集的,也就是說,表本身就是聚集索引,全表掃描,掃的就是當然就是聚集索引本身咯。myisam表是堆表,數據存儲并不是根據主鍵聚集的。
innodb走全表掃描,就是從聚集索引最左端葉子塊一直往右遍歷咯,跟全索引掃描差不多。
而同樣是全表掃描,innodb是不是比myisam快呢?我的理解是myisam比innodb快哦。因為對于同樣的數據,由于存儲引擎對數據的組織和存儲原理不一樣,myisam表是比innodb表小的,那么在數據塊大小一定的情況,表小,也就說整個表的數據塊數量少,所以全表掃描過程需要讀取的數據塊的IO就少了哦。一次IO是讀一個數據塊到bufferpool,而不是一行數據。
                            
查看完整回答
反對 回復 2019-05-20
  • 2 回答
  • 0 關注
  • 801 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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