已经看过,还需要温习的:
2.SpringBoot + MyBatis + MySQL 读写分离实战
- top 找到占用CPU最高的进程
- ps -ef | grep 进程ip 查看进程下边的所有服务
- 查看服务打印的日志
- jstack 进程ip 下载Java堆栈信息
- top -p 进程id -H 查看该进程下占用CPU高的线程id
- 将线程id转为16进制 用这个16进制线程id 在堆栈日志里查找对应的栈信息 所执行的代码
5.Select-SQL执行过程
基础的SQL执行顺序
1.from 先选择一个表,或者说源头,构成一个结果集。
2.where 然后用where对结果集进行筛选。筛选出需要的信息形成新的结果集。
3.group by 对新的结果集分组。
4.having 筛选出想要的分组。
5.select 选择列。
6.order by 当所有的条件都弄完了。最后排序。
Join连接查询执行过程
详细过程2
总结
外连接:(letf join,right join,full join/mysql不支持full join/)外连接必须用using或on指定连接条件。
on 和on后边的and or条件 先于 where执行
on后边的and or条件只对单个表的数据过滤,不影响整体的行数
where对join后的结果整行进行过滤,影响整体的行数
在对最终结果集没影响的前提下,优先选择结果集最小的那张表作为驱动表
自然连接:
要求两个关系表中进行比较的必须是相同的属性列,无须添加连接条件,并且在结果中消除重复的属性列。
内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
on后边的and or条件 如果一个表的数据不满足,则整行被过滤,影响整体的行数
6.Mysql数据库索引
Myisam使用的是非聚集索引也叫非聚簇索引
InnoDb使用的是聚集索引()
6.1聚集索引和非聚集索引:
定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。
–主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚集索引(clustered index)。
–非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。
如果语句是 select * from T where ID=500,即 主键查询方式,则只需要搜索 ID 这棵 B+树 ;
如果语句是 select * from T where k=5,即 普通索引查询方式,则需要先搜索 k 索引树,得到 ID的值为 500,再到 ID 索引树搜索一次。这个过程称为回表
6.2InnoDb:
–InnoDB表存储基于主键列的值进行组织,以加速涉及主键列的查询和排序。 为获得最佳性能,请根据性能最关键的查询仔细选择主键列。 因为修改聚集索引的列是一项昂贵的操作,所以选择很少或从不更新的主列。
–InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。
–聚集索引的缺点就是修改起来比较慢,因为它需要保持表中记录和索引的顺序需要一致,在插入新记录的时候就会对数据也重新做一次排序。
6.3 组合索引和单个索引
–多个单列索引:在多条件查询时优化器会选择最优索引策略,可能只用一个索引,也可能将多个索引全用上! 但多个单列索引底层会建立多个B+索引树,比较占用空间,也会浪费一定搜索效率,故如果只有多条件联合查询时最好建联合索引。
–组合索引最左前缀原则:
如果第一个字段是范围查询需要单独建一个索引
在创建联合索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。这样的话扩展性较好,比如 userid 经常需要作为查询条件,而 mobile 不常常用,则需要把 userid 放在联合索引的第一位置,即最左边。