mysql宝典之-函数学习

最近发现了一个比较好的学习网站和工具下载网站,相当便宜,感兴趣的同学请移步:

昂炎数据(www.ayshuju.com)

count函数

count是一个聚合函数,首先理解一下count的含义:

count(*):查询出所有记录的条数

count(字段):查询出的所有记录中,不为null的条数

count(1):查询出的所有记录的条数

count(主键id):查询出的记录中主键不为null的条数

通过上面可以知道,count(*)和count(1)的效率最高,

count(*)和count(1):mysql的计算数据总和的方式是把所有数据条数逐一读入内存,做累加

count(字段)这样的方式,是把该字段读入内存,比对一下是否是null,然后再把数据条数累加

可以看出,count(字段)和count(主键)这种形式比count(*)和count(1)多了一种把该字段读入内存,然后计算是否为null的一步,所以效率要偏低。

还有一个问题,为什么每次都要计算一次数据条数呢,而不是直接在表数据中维护一个这样的数值呢。

这个又涉及到表的视图了,如果内部维护一个数值,会导致出现脏读等问题。

delete 语句

delete某条数据,或者drop table时,并不会真的把数据删掉,数据库会把该内存页或者记录标记为已删除的区域,这样该数据就进入了可以被覆盖的区域,所以,删除表数据,是不会起到减少数据库大小的作用的。

order by

全字段排序,当单行长度不超过设定值时,max_length_for_sort_data 这个是控制该设置的,使用全字段排序

如果排序的字段超过这个值,会使用rowid排序。

例如:select city ,age,name from table_name where city = '杭州' order by name limit 1000

这句话的全字段排序执行流程:

1、规划sort_buffer,不超过设置值,sort_buffer使用的字段就是city,age,name,id

2、根据city的索引找到city是杭州的所有id

3、根据id找到所有行

4、取city,age,name放入sort_buffer

5、把sort_buffer排序一下

6、取前1000条

rowid排序:

1、规划sort_buffer,超过了设置值,sort_buffer这个临时表只用id和name字段

...

...

...

7、再取sort_buffe的前1000条数据的id,再去原表中取出city,age,name,返回

流程的基本都一样,只不过sort_buffer的大小和最后一步不一样。

group by

当前读:

select * from table lock in  share  mode

当前读并且加写锁

select * from  table for  update

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值