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