海角孤星
2014-11-17 22:27
select count(release_year = '2006' or NULL) from film;
select count(release_year) from film where release_year = '2006';
连个sql语句哪一个更快一些?
为什么要加or null?1.因为count(参数) 只要参数不为null,都会进行计数,只写year=2006(相当于year==2006)是个true,计数,如果不加or null,那么year==2007 或者year==2008是个false,也会进行计数。2.如果加了or null 的话 ,year==2006是个ture,true or null 是true 会计数;year==2007是个false,false or null 等于null,则不会计数。可以参考这个文章https://wangyaoxu.github.io/2017/09/21/mysql-count/
楼上又在扯了.....
这分两种情况讨论:
第一种情况, 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个元素的数组时间几乎是一样的, 因为测试样本根本不具有区分度!
差不多快。。。。。。呵呵
[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
性能优化之MySQL优化
101639 学习 · 221 问题
相似问题