疯格_
如果有其他函数计算会失效,但是max是求最大值,索引本身就是按大小排好的,所以max,min都不会失效
xingkong8
EXPLAIN :模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。
无处安放滴青春
count()中只有结果是not null时,才计数+1。比如在‘select count(year=2017) from film’中,count()里面的条件判断的结果可能是true,也有可能是false,在数据库中的表示就是1或者0,这两者都不为null,属于not null。而在条件语句后面加上or null,即表示当‘or’左边的条件判断的结果是true时,则返回1,计数+1;是flase时,则返回或执行‘or’右边的字段或判断,即返回null,不计数。
博海
这个索引是永久的。mysql临时的一般是一些参数设置。不过现在5.7版本,以前需要重启才能生效的参数,也不用重启了
江南水乡
一般是通过索引的方式来优化另外就是可以考虑改写SQL语句来试试
斌斌524
恰好相反,release_year='2006' or null并不是release_year='2006' or release_year is null。
release_year='2006'得到的值是1或者是0,再加上or null得到的值是1或者null。
然后利用null不会被count计数来去除release_year为null的结果。
小淞
个别老师的口音或者发音是有些误差,敬请谅解!
_naruto
课程中没有具体的说明,MySQL中MAX()函数就是返回指定列中的最大值,忽略NULL值。
比如:
mysql> SELECT MAX(prod_price) AS max_price -> FROM products; +-----------+ | max_price | +-----------+ | 55.00 | +-----------+ 1 row in set (0.00 sec)
V仔兽HZW
因为 当 release_year不是 2006时 ,release_year='2006' 结果false 不是 NULL,
Count在 值是NULL是 不统计数, 至于加上or NULL , 很像其他编程里的or运算符,第一个表达式是true就是不执行or后面的表达式,第一个表达式是false 执行or后面的表达式 。当release_year不为2006时release_year = '2006' or NULL 的结果是NULL,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个元素的数组时间几乎是一样的, 因为测试样本根本不具有区分度!