注意:這里的count(*)和count(id)及count(1)其實沒有什么區別了,因為我們新建這張表時已經建好了主鍵,mysql和大多數的數據庫引擎一樣會做一些優化,它會去根據主鍵索引來統計。
explain select count(*) from Table1
explain select count(*) from Table2
得到的執行計劃分別如下:
第一句:
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
Select tables optimized away |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
第二句:
+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | Table2 | index | NULL | PRIMARY | 4 | NULL | 3 |
Using index |
+----+-------------+--------+-------+---------------+---------+---------+------+------+-------------+
由此,我們能很明顯的看出Table1是MyISAM類型的表,統計行數時它已經是最優的語句了( Select tables optimized away ,表示已經不能再優化了,一些資料上說MyISAM類型的表將Rows存在一個地方,查詢時直接使用即可。)。Table2是InnoDB類型的表,統計行數時它將使用聚集索引進行統計。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈