Mysql

文章讲述了如何在MySQL中定位和分析慢查询,包括开启慢查询日志、使用EXPLAIN分析执行计划。讨论了索引类型如聚簇和非聚簇索引,以及覆盖索引的概念和优化作用。还提出了索引创建原则,并列举了可能导致索引失效的情况。此外,文章提及了SQL语句优化技巧,如避免SELECT*和使用INNERJOIN,并介绍了事务的四大隔离级别及其在并发问题中的作用。
摘要由CSDN通过智能技术生成

如何定位慢查询

在MvSOL的系统配置文件中开启这个慢日志的功能,并且也可以设置SQL执行超过多少时间来记录到一个日志文件中,这样就可以在日志文件找到执行比较慢的SOL了。

一个SQL语句执行很慢,如何分析

候选人: 如果一条sql执行很慢的话,我们通常会使用mysql自动的执行计划explain来去查看这条sql的执行情况

比如第一个在这里面可以通过key和keylen检查是否命中了索引,或者是否有索引失效的情况。

第二个,可以通过type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描。

第三个可以通过extra建议来判断,是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复

 

索引

 

什么是聚簇索引,非聚簇索引,回表查询         

什么是覆盖索引

面试官:知道什么叫覆盖索引嘛 ?

覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。
如果按照二级索引查询数据的时候,返回的列中没有创建索引,有可能会触发回表查询,尽量避免使用select*,尽量在返回的列中都包含添加索引的字段

面试官: MYSOL超大分页怎么处理?

可以采用覆盖索引和子查询来处理。
先分页查询数据的id字段,确定了id之后,再用子查询来过滤,只查询这个id列表中的数据就可以了,因为查询id的时候,走的覆盖索引,所以效率可以提升很多。
 

 

索引创建原则有哪些?

第一个是添加索引的字段是查询比较频繁的字段,一般也是像作为查询条件,排序字段或分组的字段这些。
第二个是通常创建索引的时候一般使用复合索引来创建,一条sql的返回值,尽量使用覆盖索引,如果字段的区分度不高的话,我们也会把它放在组合索引后面的字段。

第三个是如果某一个字段的内容较长,我们会考虑使用前缀索引来使用,当然并不是所有的字段都要添加索引,这个索引的数量也要控制,因为添加索引也会导致新增改的速度变慢。

 

什么情况下索引会失效 ? 

sql优化的经验

面试官:你平时对sql语句做了哪些优化呢?

第一个是SELECT语句务必指明字段名称,不要直接使用selet*。

第二个是要注意SOL语句避免造成索引失效的写法。

第三个如果是聚合查询,尽量用union all代替union,union会多一次过滤,效率比较低;

第四个如果是表关联的话,尽量使用inner join,不要使用用left join或right join,如必须使用一定要以小表为驱动

 

事务的特性是什么?可以详细说一下吗? 

并发事务带来哪些问题?

面试官:怎么解决这些问题呢? MySQL的默认隔离级别是?

解决方案是对事务进行隔离,MySOL支持四种隔离级别,分别有:
第一个是未提交读,它解决不了刚才提出的所有问题,一般项目中也不用这个。

第二个是读已提交,它能解决脏读的问题的。

第三个是可重复读,它能解决脏读和不可重复读,这个也是mysql默认的隔离级别。

第四个是串行化,它可以解决刚才提出来的所有问题,但是由于让是事务串行执行的,性能比较低。

 

主从同步原理 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值