nnodb引擎的表在使用selectcount的時(shí)候,如果表的總行數(shù)在1-2萬(wàn)條以內(nèi), 速度應(yīng)該不是瓶頸,但是一旦超過(guò)了這個(gè)值, 隨著行數(shù)的增多,selectcount查詢效率會(huì)迅速的下降。
測(cè)試表大約4.3萬(wàn)行 Myisam引擎: SELECTSQL_NO_CACHECOUNT(*)FROM`roundmember2` 耗費(fèi)105微秒 innodb引擎: 耗費(fèi)10335微秒 可以看出innodb引擎耗時(shí)是myisam引擎的98倍!
這還是僅僅是4萬(wàn)多行的數(shù)據(jù)下測(cè)試的差距,隨著記錄行的增加,這個(gè)差距會(huì)越來(lái)越大。
MyISAM會(huì)保存表的總行數(shù), 這段代碼在MyISAM存儲(chǔ)引擎中執(zhí)行, MyISAM只要簡(jiǎn)單地讀出保存好的行數(shù)即可。
因此,如果表中沒(méi)有使用事務(wù)之類的操作,這是最好的優(yōu)化方案。
然而,innodb表不像myisam有個(gè)內(nèi)置的計(jì)數(shù)器, InnoDB存儲(chǔ)引擎不會(huì)保存表的具體行數(shù),因此, 在InnoDB存儲(chǔ)引擎中執(zhí)行這段代碼,InnoDB要掃描一遍整個(gè)表來(lái)計(jì)算有多少行。