2022年3月29日记:Linux服务器开发, SQL语句,索引,视图,存储过程,触发器(2)
────────────────────────────────────
┌————————————┐
│▉▉♥♥♥♥♥♥♥♥ 99% │ ♥❤ 鱼沈雁杳天涯路,始信人间别离苦。
└————————————┘
对你的感情正在充电中,请稍侯…
────────────────────────────────────
推荐一个 零声学院 免费公开课程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习]
https://ke.qq.com/course/417774?flowToken=1042807
────────────────────────────────────
SQL语句,索引,视图,存储过程,触发器
前言
今天又重新刷了一遍mysql的第一节课,好久不看已经有些生疏了。主要是mysql的运行机制,B+树的存储结构。随着时间的推移,对于mysql我又感觉已经完全的生疏了,还是应该将数据库安装在本地,实际操作翻云覆雨一番。
数据库的分类
- mysql关系型数据库
- nosql,mongodb,redis非关系型数据库
- elasticsearch
OLTP or OLAP
Online transaction processing ,增删改查数据处理,实时性高。
On-Line Analytical Processing,对过去发生的事情进行统计分析。
前者更倾向于记录,后者更倾向于分析。
为什么mysql需要连接池?
select(listenfd+1,readfds,NULL,NULL,0);int clientfd=accept(listenfd,&adddr,&len);my_thread_create(key_thread_one_connection,&id&connection_attrib,handle_connection,(void*)channel_info);while(1){int n=read(clientfd,buff,sz);do_command();}
使用连接池可以减少密码验证等等用去的时间。
引擎需要将经常使用的数据放到buffer缓冲区中来,主要描述的是表,而非数据库一个笼统的概念。
三范式
保持数据的原子性,又要保持相关性与直接性。
- 反范式
删除表
- 删除表结构:DROP TABLE’table_name’;
- 以页为单位删除表结构+数据:TRUNCATE TABLE ‘table_name’;
- 以行为单位删除表结构+数据:DELETE TABLE ‘table_name’;
分组查询
两个步骤组成:
- 去重
- 合并
聚合函数
- count()
- group_concat(‘age’)
- sum()
- avg()
- max()
- min()
联合查询
**需要注意的是:not in/in需要进行全表扫描,所以要进行优化。**月牙用来优化not in。
问:为什么inodb需要主动创建主键索引?
总结
通过今天的学习,mysql也算是有了一个初步的了解。这确实是看的第三遍了,依然感觉有很多的收获。对mysql运行机制有了一了一个整体的概念,但是就如mark老师所说,课下的努力必不可少。
目前的学习计划还是有条不紊地、有节奏的上课,每天写一篇csdn博客,然后利用其余时间对mysql相关知识进行补充。
今天就先这样啦,感觉虽然字数不多,但是收获还是很多。