网站建设网络安全,dede免费网站模板utf8,ps网站建设目标,标志设计的表现形式如何定位慢查询 1、测试环境压测时#xff0c;有的接口非常慢#xff0c;响应时间超过2秒以上。当时系统部署了运维的监控系统Skywalking#xff0c;在展示报表中可以看到是哪儿个接口慢#xff0c;可以看到SQL具体执行时间。 2、如果没有类似的监控系统#xff0c;在Mysq…如何定位慢查询 1、测试环境压测时有的接口非常慢响应时间超过2秒以上。当时系统部署了运维的监控系统Skywalking在展示报表中可以看到是哪儿个接口慢可以看到SQL具体执行时间。 2、如果没有类似的监控系统在Mysql中也提供了慢日志查询功能在mysql系统配置文件中开启慢日志的功能设置超过多少时间记录到一个日志文件中我记得配置的是2s只要sql执行时间超过2s就会记录到日志文件中。
explain type null没有使用到表、systemmysql内置表、const根据主键查询、eq_ref根据主键索引查询或唯一索引查询、ref索引查询、range走的索引but范围查询、index索引树扫描、all全盘扫描
慢SQL如何分析 采用mysql自动执行计划explain来查看执行情况 通过key和key_len检查是否命中索引如果本身已经添加了索引可以判断索引是否失效 通过type关键字查看sql是否有进一步的优化空间是否存在全索引或全盘扫描 通过extra建议判断是否出现回表如果出现可以尝试添加索引或修改返回字段
什么是索引 mysql高效访问数据的数据结构有序 提高检索数据的效率降低数据库io成本你需要全表扫描 通过索引对数据进行排序降低数据排序成本降低CPU消耗
索引底层数据结构 Mysql的InnoDB引擎采用B树的数据结构来存储索引 · 阶数更多路径更短 · 磁盘读写代价B树更低非叶子节点只存储指针叶子节点存储行数据 · B便于扫库和区间查询叶子节点是双向链表B树非叶子和叶子都会存放数据
什么是聚簇索引什么是非聚簇索引 聚簇索引聚集索引数据与索引放到一起B树叶子节点保存了整行数据有且只有一个 非聚簇索引二级索引数据与索引分开存储B树叶子节点保存对应主键可以有多个
回表查询 通过二级索引找到对应的主键值到聚集索引中查找整行数据
覆盖索引 覆盖索引指的是查询使用了索引返回的列必须在索引中全部找到。 使用id查询直接走聚簇索引一次索引扫描直接返回数据性能高 如果返回的列没有创建索引可能触发回表查询尽量避免使用select*
Mysql超大分页怎么处理 问题数据量较大limit分页查询需要对数据进行排序效率低 解决方案覆盖索引子查询。先分页查询数据id字段确定id之后使用子查询过滤只查询这个id列表中的数据就可以了查询id的时候走的覆盖索引提升效率。
select *
from tb_sku t, (select id from tb_sku order by id limit 900000000, 10) a
where t.id a.id;索引创建原则 *数据量较大且频繁查询的表 *常作为查询条件、排序、分组的字段 字段内容区分度高 内容较长使用前缀索引 *尽量联合索引 *要控制索引数量 如果索引列不能存储null值请在创建表时使用not null约束 什么情况下索引会失效 违反最左前缀法则索引失效 索引abc_index:(a,b,c)只会在where条件中带有(a)、(a,b)、(a,b,c)的三种类型的查询中使用。其实这里说的有一点歧义其实当where条件只有(a,c)时也会走但是只走a字段索引不会走c字段。 范围查询右边的列索引失效 字符串类型的数值不加单引号索引失效类型转换 以%开头的like模糊查询索引失效 不要在索引列上进行运算操作索引失效 索引包含有 NULL 值的列索引失效索引不会包含有 NULL 值的列 sql优化 表设计优化数据类型选择 索引优化索引创建原则 sql语句优化避免索引失效避免使用select * 主从复制、读写分离、不让数据的写入影响读操作 分库分表 答sql优化的话建表使用索引sql语句的编写、主从复制、读写分离数据量比较大的话可以考虑分库分表。建表的时候参考阿里开发手册《嵩山版》比如定义字段需要结合字段含义选择合适类型如果是数值的话像tinyint、int、bigint 根据实际情况选择。如果是字符串char和varchar可变长度或者text类型。使用索引的时候满足创建索引原则。sql语句select 必须指明字段不直接使用select * 注意sql语句避免索引失效写法如果是聚合查询尽量用union all 代替 union多一层过滤效率低表关联尽量使用innerjoin 不要使用 left right 必须使用的话最好小表驱动大表。
事务
特性 原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability A向B转账500元转账成功A扣500B加500原子性操作体现在要么都成功要么都失败。 转账过程数据要一致A扣除500B必须增加500 在转账过程隔离性体现在不能受其他事物干扰 事务提交以后要把数据持久化落盘
并发事务带来的问题 脏读一个事物读到领一个事务没有提交的数据 不可重复读一个事物前后读取同一条记录两次读取数据不同 幻读一个事物按照条件查询数据没有对应数据行在插入数据时又发现这行数据存在。
解决问题隔离级别 默认可重复读 RU未提交读 啥也没解决 RC读已提交 脏读 RR可重复读 脏读、不可重复读 SB串行化 脏读、不可重复读、幻读
undo log和redo log的区别 undo log逻辑日志记录与实际操作语句相反的操作。事务回滚时通过你操作恢复原来的数据 redo log记录数据页的物理变化服务宕机可以用来同步数据 redo log 保证事务的持久性 undo log保证事务的 原子性 和 一致性
事务中的隔离性是如何保证的 锁排他锁一个事务获取了一个数据行的排他锁其他事物就不能在获取改行的其他锁 mvcc多版本并发控制
MVCC 多版本并发控制一个数据的多个版本使得读写操作没有冲突。 底层实现分为三个部分隐藏字段、undo log、readView 隐藏字段DB_TRX_ID记录每一次操作的事务id自增、DB_ROLL_PTR回滚指针指向上一个版本的事务版本记录地址、DB_ROW_ID隐藏主键 undo log 回滚日志—存储老版本数据 版本链—多个事务并行操作某一行记录记录不同事物修改数据的版本通过roll_pointer指针形成一个链表 readView解决事务查询选择版本的问题在内部定义了一些匹配规则和当前一些事务id判断该访问哪儿个版本的数据不让的隔离级别快照读是不一样的最终的访问的结果不一样。如果是RC隔离级别每次之快照读生成readView如果是RR隔离级别仅在事务中第一次执行快照读时生成readView后续复用。
主从同步原理 核心是二进制文件binlogDDL数据定义语句和DML增删改语句 1、Master主库在事务提交时会把数据变更记录在二进制文件Binlog中 2、从库读取主库Binlog吸入到从库的中继日志Relay log 3、从库重做中继日志中的事件将改变反映它自己的数据
分库分表 水平分库将一个库的数据拆分到多个库中解决海量数据存储和高并发问题 水平分表解决单表存储和性能问题 垂直分库根据业务进行拆分高并发下提高磁盘IO和网络连接数 垂直分表冷热数据分离多表互不影响