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