nnodb引擎(qing)的表在使用(yong)selectcount的時候,如(ru)果(guo)表的總(zong)行數在1-2萬條以內(nei), 速度應該不是(shi)瓶頸(jing),但是(shi)一旦(dan)超過了這(zhe)個值, 隨著行數的增多,selectcount查(cha)詢效(xiao)率會迅速的下降(jiang)。
測試表大約4.3萬行 Myisam引擎(qing): SELECTSQL_NO_CACHECOUNT(*)FROM`roundmember2` 耗(hao)費105微(wei)秒 innodb引擎(qing): 耗(hao)費10335微(wei)秒 可以看出innodb引擎(qing)耗(hao)時是myisam引擎(qing)的(de)98倍(bei)!
這還是僅僅是4萬多行的(de)數(shu)據下(xia)測試的(de)差距,隨著記(ji)錄行的(de)增(zeng)加,這個差距會越(yue)來越(yue)大。
MyISAM會保存表的(de)總行(xing)數(shu), 這段代碼在MyISAM存儲引擎中執行(xing), MyISAM只要簡單地讀(du)出保存好(hao)的(de)行(xing)數(shu)即可。
因此,如果(guo)表中沒有使用事(shi)務之類(lei)的(de)操作,這(zhe)是最(zui)好的(de)優化方案(an)。
然(ran)而,innodb表不像(xiang)myisam有(you)個內置(zhi)的計數(shu)器, InnoDB存(cun)儲引擎不會保存(cun)表的具體行數(shu),因此, 在InnoDB存(cun)儲引擎中執(zhi)行這段代碼,InnoDB要掃描一遍(bian)整個表來計算有(you)多少行。