delete与truncate的区别
Delete删除只删除数据,序列不会清除,一般结合事务使用
Truncate删除是直接摧毁当前表,重新创建一个表,序列会重新开始排序,一般不结合事务
count(*),count(1),count(列名)的区别
1.count(*)和count(1)计算null值,count(列名)不计算null值,也就是说,如果一列数据中有null值,count(*)的数字会大于count(列名)
2.因为不需要额外统计null值,所以count(*)和count(1)的运行效率大于等于count(列名)
而count(*)会统计所有数据,count(1)只统计是否有数据,所以count(1)运行效率大于count(*),最快的count(主键列),因为主键列底层逻辑是索引。
运行效率count(主键列) > count(1) > count(*) > count(普通列)
where和having的区别
Where:组前查询,后面不能跟聚合函数,因为where是在所有操作之前,先对数据进行筛选
Having:组前查询,后面可以跟聚合函数
distinct去重与分组去重的区别
利用distinct去重:select distinct 字段名 from 数据表名;
利用分组去重:select 字段名 from 数据表名 group by 字段名;
在数据量少时,两种方式效率差不多;但是当数据量很大时,比如有上万,百万条数据时,利用分组去重的效率会远远超过distinct,所以推荐使用分组去重