苏州外贸网站推广,做网站怎么移动图片,网站建设运营费用包括哪些,北滘网站建设公司目录
1、慢查询
Q1#xff1a;在mysql中如何定位慢查询#xff1f;
Q2#xff1a;SQL语句执行很慢#xff0c;如何分析#xff1f;
2、索引 Q3#xff1a;什么是索引#xff1f;
Q4#xff1a;什么是聚簇索引和非聚簇索引#xff1f;
Q5#xff1a;什么是回表查…目录
1、慢查询
Q1在mysql中如何定位慢查询
Q2SQL语句执行很慢如何分析
2、索引 Q3什么是索引
Q4什么是聚簇索引和非聚簇索引
Q5什么是回表查询
Q6什么是覆盖索引 Q7索引创建的原则有哪些
Q8什么情况下索引会失效
3、优化
Q9SQL优化的经验
4、事务
Q10undo log和redo log的区别
Q11事务的隔离性是如何保证的呢 1、慢查询
Q1在mysql中如何定位慢查询
慢查询表现为页面加载过慢、接口响应时间过长
开源工具如SkywalkingMySQL自带慢日志记录了执行时间超过指定参数的SQL语句
Q2SQL语句执行很慢如何分析
使用SQL的EXPLAIN语句
EXPLAIN SELECT * FROM j_user_role WHERE id12 type字段性能由好到坏NULL、system、const根据主键查询、eq_ref主键索引查询或唯一索引查询、range范围查询、index索引树扫描、all全盘扫描 select *
key字段代表是否命中了索引索引的名称
2、索引 Q3什么是索引
索引index是帮助MySQL高效获取数据的数据结构。MySQL的索引底层实现是B树原因分析可以看我的另一篇博客面试八股文--数据库基础知识总结(2) MySQL_dbms-CSDN博客
Q4什么是聚簇索引和非聚簇索引
聚簇索引将数据存储与索引放到一块索引结构的叶子节点保存了行数据必须要、且只有一个一般就是主键
非聚簇索引二级索引将数据与索引分开存储索引结构的叶子节点关联的是对应的主键可以有多个
Q5什么是回表查询
先通过二级索引找到对应的主键再通过聚簇索引找到对应的数据这个过程就是回表查询。
Q6什么是覆盖索引
是指查询使用了索引并且需要返回的列在该索引中已经全部能找到。触发了回表查询就不是覆盖索引了
举个例子 id是主键name也有索引
-- 是覆盖索引因为数据在索引中能找到
SELECT * FROM table WHERE id1
-- 是覆盖索引因为name在索引中能找到
SELECT name FROM table WHERE nameAlice
-- 不是覆盖索引因为gender在name索引中找不到
SELECT name,gender FROM table WHERE nameAlice Q7索引创建的原则有哪些
针对数据量较大且查询比较频繁的表建立索引表中的某一字段常作为查询条件、排序、分组操作的尽量选择区分度高的列作为索引进来使用联合索引、减少单列索引要控制索引的数量索引越多维护索引的代价也越大如果数据列不能存储NULL时最好在创建表时使用NOT NULL约束
Q8什么情况下索引会失效 1违反最左前缀法则
索引了多列要从索引的最左前列开始并且不跳过索引中的列。也就是说联合索引中查询只能从最左到最右跳过就会失效
2范围查询右边的列索引失效
例如一个联合索引有name、status、address三个当查询 namevalue, statusvalue, addressvalue时address的索引会失效因为status使用了范围查询
3索引列上进行运算操作索引失效例如求字串、求平均
4字符串不加单引号索引会失效发生了类型转换
5模糊查询有可能导致索引失效
name‘%aaa’或者name‘%aaa%’会失效而name‘aaa%’则不会
3、优化
Q9SQL优化的经验
1表的设计优化比如设置合适的类型
2索引的优化如Q7、Q8
3SQL语句优化
select知名字段名称尽量避免select *尽量避免索引失效使用union all代替union因为union会多一次过滤操作避免在where中对字段进行表达式操作Join优化能用inner join就不用left join、right jion
4主从复制、读写分离
4、事务
Q10undo log和redo log的区别
redo log记录了事务提交时数据页的物理修改用来实现事务的持久性。主要用在刷新脏页到磁盘发生错误时进行数据恢复使用。undo log回滚日志。记录数据被修改前的信息作用有提供回滚和MVCC。undo log记录的是逻辑日志redo log保证事务的持久性undo log保证事务的原子性和一致性
Q11事务的隔离性是如何保证的呢
1锁加入排他锁
2MVCC多版本并发控制指维护一个数据的多个版本使得读写操作没有冲突。
MVCC的实现原理记录中的隐藏字段事务id和回滚指针、undo log回滚日志、版本链、readview ReadView读视图是读快照SQL执行时MVCC提取数据的依据。
当前读读取的是记录的最新版本快照读读取的记录数据的可见版本不加锁
这个就导致了在不同事务隔离级别下读取数据的不同在RC级别下每次操作都会生成一个ReadView因此可能导致“不可重复读问题”而在RR隔离级别下仅对事务中第一次执行快照时生成ReadView后续复用该ReadView 都看到这里了给个小心心♥呗~