count(release_year = '2006' or NULL)和count(release_year)哪一個更快一些?
select count(release_year = '2006' or NULL) from film;
select count(release_year) from film where release_year = '2006';
連個sql語句哪一個更快一些?
select count(release_year = '2006' or NULL) from film;
select count(release_year) from film where release_year = '2006';
連個sql語句哪一個更快一些?
2014-11-17
舉報
2018-12-27
為什么要加or null?1.因為count(參數(shù)) 只要參數(shù)不為null,都會進行計數(shù),只寫year=2006(相當于year==2006)是個true,計數(shù),如果不加or null,那么year==2007 或者year==2008是個false,也會進行計數(shù)。2.如果加了or null 的話 ,year==2006是個ture,true or null 是true 會計數(shù);year==2007是個false,false or null 等于null,則不會計數(shù)??梢詤⒖歼@個文章https://wangyaoxu.github.io/2017/09/21/mysql-count/
2015-07-29
樓上又在扯了.....
這分兩種情況討論:
第一種情況,?release_year上沒有索引,?這沒啥好說的,?都是掃全表.
第二種情況,?release_year上有btree索引,?雖然兩個查詢都會用到索引進行查詢,?但是利用的方式是不一樣的, [SQL]select count(release_year = '2006' or NULL) from sakila.film;這條語句會進行全索引的遍歷,?如果explain這個語句你會發(fā)現(xiàn)type是index.?而[SQL]select count(release_year) from sakila.film where release_year = '2006';這條語句會先利用索引找到所有符合where語句條件的記錄后執(zhí)行count, (在數(shù)據(jù)量非常大的情況下)所遍歷的記錄會少很多.
樓上之所以測試時間都相等是因為測試表數(shù)據(jù)太小啦!!?就好像我利用快排排序一個2個元素的數(shù)組和利用冒泡排序排序一個2個元素的數(shù)組時間幾乎是一樣的,?因為測試樣本根本不具有區(qū)分度!
2014-12-11
差不多快。。。。。。呵呵
[SQL]select count(release_year) from sakila.film where release_year = '2006';
受影響的行: 0
時間: 0.001s
[SQL]select count(release_year = '2006' or NULL) from sakila.film;
受影響的行: 0
時間: 0.001s