数据库

2022-01-18  本文已影响0人  bangbang2

1、主从复制

在主数据库写,在从数据库来读,适用在主数据库被锁表的时候
1:master数据库将数据的改变记录在binlog中
2.slave数据库向master探测,如果发生改变,就会创建一个io进程
[图片上传失败...(image-473223-1642513862753)]

2、为什么不用b树,用b+树

b树

img
b+树
img
1:b+树只有叶子节点会存放数据,b+树的叶子节点有一条链、都是从根节点到叶子节点查找,b+树符合局部性原理 image.png

索引为什么会失效

两个列都建立索引,两个列索引进行比较,这样会很慢呐

image.png

某一列元素存在null值的

image.png image.png

like通配符 ,如果 %明----这样会导致索引失效

image.png

innodb和myisam的区别

mysql是5.5之前的数据库引擎默认是myisam,现在在innodb

二者的区别:

1:myisam只支持表级锁, innodb支持表级锁和行级锁,默认是行级锁

2:innodb支持事务,回滚,崩溃恢复,外键和acid,而myisam数据库只强调性能,都不支持

3:innodb支持mvcc,多版本并发控制,而myisam不支持

数据库慢的时候如何优化

偶尔很慢:

1:刷新脏页
数据库的数据先在内存,然后同步到redo log中,在空闲的时候,再将redo log写入到磁盘中,如果redo log要满了,就立即要写入到磁盘里,这时候就会很慢


image.png

2:拿不到锁


image.png

一直很慢

1:没有建立索引
2:有索引,但是没有走索引
3:表数据太大,没有分库分表

mysql中自增id可以用做uid吗

uuid的缺点
1:uuid是无序的,查找的时候得分页,比较慢
2:uuid占用的空间比较大

数据库优化的建议:

1:都用innodb
2:字符集统一为是utf-8
3:单表数据量小于500w
4:优先选存储最小的数据类型
5:列定义为not null ,因为null需要单独花空间去存
6:禁止select *
7:不要join太多的表
8禁止赋予super权限

如何定位和优化慢查询?

如何定位?
1:查看慢查询日志,来看已经执行完的慢查询,long_query_time是自己去设置的


image.png
image.png
image.png

2:show processlist 查看正在执行的慢查询
3:用explain方法来分析
在sql语句前加上explain,就会得到mysql的执行计划


image.png
当type类型为index和all就需要进行优化,因为这样是全表搜索
image.png
如何优化?
没有索引就建立索引,避免出现不走索引的情况出现

索引建立的原则

1:尽量要建立唯一性索引,这样的效率高
2:最左前缀匹配原则
遇到范围查询就会停止匹配,尽量保证联合索引的范围查询出现在最后


image.png

3:为经常排序、分组的元素建立索引
4:为常要查询的元素建立索引
5:限制索引的数目
6:尽可能用数据类型比较小的索引
7:删除不用的索引
8:索引不参与计算

上一篇下一篇

猜你喜欢

热点阅读