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
楼上又在扯了.....
这分两种情况讨论:
第一种情况, release_year上没有索引, 这没啥好说的, 都是扫全表.
第二种情况, release_year上有btree索引, 虽然两个查询都会用到索引进行查询, 但是利用的方式是不一样的, [SQL]select count(release_year = '2006' or NULL) from sakila.film;这条语句会进行全索引的遍历, 如果explain这个语句你会发现type是index. 而[SQL]select count(release_year) from sakila.film where release_year = '2006';这条语句会先利用索引找到所有符合where语句条件的记录后执行count, (在数据量非常大的情况下)所遍历的记录会少很多.
楼上之所以测试时间都相等是因为测试表数据太小啦!! 就好像我利用快排排序一个2个元素的数组和利用冒泡排序排序一个2个元素的数组时间几乎是一样的, 因为测试样本根本不具有区分度!
举报