1.sql操作
2.索引 索引原理 索引优化 sql语句优化
3.事务 并发读异常的问题 并发死锁怎么解决
4. mysql与缓存 解决读性能问题 集群的内容
定义:
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL是关系数据库系统的标准语言。 关系型数据库包括:MySQL, SQL Server, Oracle, Sybase, postgreSQL 以及 MS Access等; SQL命令包括:DQL、DML、DDL、DCL以及TCL;MySQL由以下几部分组成: 连接池组件、管理服务和工具组件、SQL接口组件、查询分析器组件、优化器组件、缓冲组件、插件式存储引擎、物理文件。 开启多个连接也会影响数据库的效率
数据库主线程只关注读 事件,只监听listenfd,连接的事件。MySQL采用的阻塞的IO,因为mysql需要访问磁盘,重IO,是同步的。redis采用的reactor异步的。mysql只支持150左右的连接,连接数量多会影响性能。
主线程负责接收客户端连接,然后为每个客户端 fd 分配一个连接线程,fd是阻塞的,负责处理该客户端的 sql命令处理; 1.词法句法分析,对象权限验证,制定执行计划与路径,缓存由引擎操作,如果需要查找的在buffer中存在,就从buffer中取,否则访问磁盘。 流程:sql是个语言,首先做词法句法分析(SQL Interface),对象的权限验证,过滤(parser),优化执行路径,根据索引(optimizer),缓存 存储引擎是描述表的。搜索
复制
管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求; 网络处理流程:主线程接收连接,接收连接交由连接池处理; 主要处理方式:IO多路复用select + 阻塞的io; 需要理解:MySQL命令处理是并发处理的; 数据库的三范式: 1.确保每列保持原子性;数据库表总的所有字段都是不可分解的原子值; 2.确保表中的每列都和逐渐相关,而不能只与主键的一部分相关。 3.确保每列都和逐渐直接相关,不是间接相关;减少数据冗余。 反范式: 如果重复数据相对较少,并且经常被查询。 删除表数据: truncate:截断表,以页为单位(至少有两行数据),有自增索引的话,从0开始。 delete:逐行删除,有自增索引的话,从之前值继续累加。 有几种条件语句: 1.select * from table where condition; :筛选 2.group by 列名 having condition; :分组 3. ...join table on condition; :联表 条件判断中尽量选择索引。索引是帮助我们快速查询数据的。 去重: select distinct 列名 from table group by 合并 group_concat 通常与group by联合用 聚合函数 (列) sum() avg() max() min() count(0 判空查询: 即使条件是索引, 判空时也不会走索引,... where class_id is not null; is null 会造成索引失效; 模糊查询 使用like关键字, %代表任意数量字符, _代表占位符 分页查询 分页查询主要查看第N条到第M条信息,通常和排序一起。速度快。 OLTP读次数大约是 写的10倍左右,因此要解决读的性能 为什么innodb需要主动创建主键索引,并且以自增的整数作为主键?
1.select column from tableA left join tableB on A.key = B.key;
2.select column from tableA inner join tableB on A.key = B.key;
3.select column from tableA right join tableB on A.key = B.key;
4.select column from tableA left join tableB on A.key = B.key where B.key is null;
5.select column from tableA right join tableB on A.key = B.key where A.key is null;
6.select column from tableA full outer join tableB on A.key = B.key;
7.select column from tableA full outer join tableB on A.key = B.key where A.key is null or B.key is null;
where B.key is null
编写sql语句时,首先把功能拆分,然后再聚合。