MySQL执行计划

执行计划,SQL语句过来,会先解析,词法解析,语法解析,之后生成执行计划,计划上会算出使用全盘扫秒还是依靠索引,

mysql不缓冲执行计划,oracle有

 

体系结构

1、优化器---》执行计划

2、MySQL不缓存执行计划(硬解析:用cpu来解析;软解析:采用执行计划来解析)

3、MySQL8.0以后,query cache就被去掉了(如果数据发生更改,就需要所有数据都刷新一下,query cache就得全刷新一下,所以把他在8.0去掉了)

4、MySQL数据库存储引擎Innodb以聚簇索引方式存储为聚簇表,不要求非空且唯一列。

5、Innodb buffer pool以LRU链表方式存储数据。

6、Innodb buffer pool缓冲数据和索引。

       在它中有一个缓冲区域change buffer,他会把同类的数据改变先存放于此处,不去进行即时的更改,而是等这个区域的数据满了或者收到了读的操作时候他才会进行数据更改,以此减少了去更改的频率,提高了性能的利用率。(1、修改的数据为唯一索引列时候,change buffer失效。因为修改唯一索引,需要先去查是否有重复索引,没有的话菜放进去change buffer,有查的功夫还不如直接放进去。2、change buffer也不适合即改即读的操作)

       唯一索引:修改时候要判断唯一性!(内存相差微乎其微)

       普通索引:修改时候不需要读取记录!      这个更胜一筹!!!

7、Redo日志不可以归档

8、但是Redo可以有自己的commit提交规则,他可以设置inndb_flush_log_at_trx_commit为1,0,2,1为每提交一次就刷新一次盘,0为没1秒刷新一次,2为每一秒钟就刷新一次,把数据刷到本地磁盘(可以防止数据库宕机)。

9、每个用户都会有自己的join,sort,multi,range(MRR)。

10、concat、concat_ws、group_concat函数用法和区别:

一:concat()函数可以连接一个或者多个字符串

  concat(str1,str2,…) 返回结果为所有连接参数产生的一个字符串。如有任何一个参数为NULL ,则返回值NULL。

   示例:select concat('aa','bb','cc');   

结果:aabbcc

 

二:concat_ws(separator,str1,str2,...) 

  是concat()的特殊形式。第一个参数是其它参数连接的分隔符。分隔符是放在要连接的所有字符串之间。分隔符可以是一个字符串,也可以是其它参数。

    示例:select concat_ws(',','aa','bb','cc');  

    结果:aa,bb,cc

 

三:group_concat()分组拼接函数

  用法:group_concat([distinct] 连接字段 [order by asc/desc 排序字段] [Separator '分隔符'])

  对下面的一组数据使用 group_concat()

表如下:

示例一:


示例二:

示例三:

示例四:

 

11、char_length和length

       总结一下就是说,无论是LENGTH()还是CHAR_LENGTH()都是为了统计字符串的长度。只不过,LENGTH()是按照字节来统计的,CHAR_LENGTH()是按照字符来统计的。例如:一个包含5个字符且每个字符占两个字节的字符串而言,LENGTH()返回长度10,CHAR_LENGTH()返回长度是5;如果对于单字节的字符,则两者返回结果相同。

12、user()和current_user()

user()

表示当前的登录用户

current_user()

表示对应于mysql.user表里对应的账号。

mysql> select user();
+----------------------+
| user()               |
+----------------------+
| test@192.168.203.132 |
+----------------------+
1 row in set (0.00 sec)



mysql> select current_user();
+------------------+
| current_user()   |
+------------------+
| test@192.168.%.% |
+------------------+
1 row in set (0.00 sec)

user()是用来显示当前登陆的用户名与它对应的host;currrent_user()是用来显示当前登陆用户对应在user表中的哪一个。

13、获取当前日期的函数:CURDATE()。DATE为数据类型。

14、mysql存数据和索引的地方*.ibd *  数据修改超过百分之十时候会进行信息的统计,放在.frm

analyze table test1;查看test1的统计信息

show index from test1;展示有索引的列

 

个性签名:一个人在年轻的时候浪费自己的才华与天赋是一件非常可惜的事情

        如果觉得这篇文章对你有小小的帮助的话,记得在左下角点个“👍”哦,博主在此感谢!

 

万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾! 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值