count(*) 會查詢所有記錄數,,包括為null值的數據;
count(column)不會包含 column值為null的情況;
count(1) 和 count(*)相同,,不同的是,,mysql不同的存儲引擎,對count(*)做了不同的優化
阿里開發手冊中,,強制要求用count(*),而不是其他兩種
count(*)是 SQL92 定義的
標准統計行數的語法,跟數據庫無關,跟 NULL 和非 NULL 無關。
常用的引擎為InnoDB和MyISAM
InnoDB ; 支持事務,,,行級鎖 ,必須進行全表掃描,掃描索引值,,非聚簇索引的葉子只保存,數據位置,而聚簇索引包含整行數據,查詢時會找小的索引值進行索引掃描
前提是查詢中不包括where以及group by條件語句;
MyISAM : 不支持事務,。,,表級鎖,,會將每張表的count值,存貯下來,當訪問時,直接返回,但是不能加where(此優化並不會影響數據的准確性,因為他是表級鎖,,並發的修改不會發生))
