MySQL不常用、易忽略的小知识
笔者从事开发也有一段时间了,关于数据库方面的一些小知识在这里总结一下
1、count(*),count(1)与count(column)区别
count(*)对行的数目进行计算,包含NULL
count(1)对行的数目进行计算,包含NULL
count(column)对特定的列的值具有的行数进行计算,不包含NULL值。
所以count(1)这个用法和count(*)的结果是一样的。
注意:
如果表没有主键,那么count(1)比count(*)快。
如果有主键,那么count(主键,联合主键)比count(*)快。
如果表只有一个字段,count(*)最快。
count(1)跟count(主键)一样,只扫描主键。count(*)跟count(非主键)一样,扫描整个表。明显前者更快一些。
2、mysql日期加减
获取当前日期时间函数 now() 和 sysdate():
SELECT now(), sleep(3), now();
结果是
mysql> select sysdate(), sleep(3), sysdate();
结果是
可以看到,虽然中途 sleep 3 秒,但 now() 函数两次的时间值是相同的; sysdate() 函数两次得到的时间值相差 3 秒。
sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。
mysql> select curdate(); #获得当前日期(date)函数:curdate() mysql> select curtime(); #获得当前时间(time)函数:curtime()
为日期增加一个时间间隔:date_add()
mysql> SELECT date_add('2017-12-25 17:43:44', interval 1 day);
结果为:2017-12-26 17:43:44
类似的还有:
set @dt = now(); select date_add(@dt, interval 1 day); -- add 1 day select date_add(@dt, interval 1 hour); -- add 1 hour select date_add(@dt, interval 1 minute); -- ... select date_add(@dt, interval 1 second); select date_add(@dt, interval 1 microsecond); select date_add(@dt, interval 1 week); select date_add(@dt, interval 1 month); select date_add(@dt, interval 1 quarter); select date_add(@dt, interval 1 year); select date_add(@dt, interval -1 day); -- sub 1 day