问题:请讲下在mysql下如何优化sql

分析:该问题主要考察对mysql的优化,重点考虑对索引优化的掌握。

回答要点:

主要从以下几点去考虑,

1、什么样的sql需要优化?

2、怎么对sql进行优化?

3、如何避免索引失效?

要优化sql首先要判断哪些sql需要优化,然后是怎么优化,最后才是优化

开启慢查询

在mysql中慢查询是默认关闭的,在排查慢sql的时候建议开启慢查询,但在生产环境下不建议开启,因为会对性能造成影响;

explain

在上步中通过慢查询可以定位到慢sql,接着就可以使用explain关键字对慢sql进行分析,explain的作用就是给出sql的执行计划。

重点关注下面几列,id、type、possible_keys、key、extra

id代表执行的顺序,从大到小依次执行,id相同的情况从上到下执行

type代表连接使用了那种类别,是否使用了索引,从坏到好是all、index、range、ref、eq_ref、const、system。all是全表扫描;index使用索引;range表示范围查找;ref表示用到了非唯一索引;eq_ref表示使用唯一索引;const表示主键索引且是等值比较;system表示查询的系统表;

possible_keys代表可能用到的索引键

key代表实际用到的索引键

rows代表扫描的行数

extra代表除了已经显示的信息外同样重要的信息,常见的取值有using where using index usingfilesort usingtemporary。using where 表示使用了where条件;using index表示使用到了索引;usingfilesort表示使用到了文件排序,不是使用索引排序;usingtemporary表示用到了临时表,多用在order by/group by上

避免索引失效

索引在sql的优化方面占据了很大的比重,如何避免索引失效那

1、避免隐式的数据类型转换;例,where id=10  id为varchar类型,这时索引失效

2、在like中避免使用前缀%;例,where id like '%12',这时索引失效,如果让索引不失效,需要使用覆盖索引

3、避免在where条件中进行运算;例,where concat(id,'12')=12,这时索引失效

4、不符合索引匹配的最左原则的;多用在联合索引上,没使用到联合索引的第一个字段;

5、mysql使用分析器,分析出来的结果是全表扫描更快,这时也不会使用索引;

java面试一日一题:如何优化sql的更多相关文章

  1. java面试一日一题:mysql中常用的存储引擎有哪些?

    问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...

  2. java面试一日一题:讲下在什么情况下会发生类加载

    问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...

  3. java面试一日一题:讲下mysql中的undolog

    问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...

  4. java面试一日一题:java中垃圾回收算法有哪些

    问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...

  5. java面试一日一题:java中的垃圾回收器

    问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...

  6. java面试一日一题:rabbitMQ的工作模式

    问题:请讲下rabbitMQ的工作模式 分析:该问题纯属概念题,需要掌握rabbtiMQ的基础知识,同时该题也是切入MQ的一个引子: 回答要点: 主要从以下几点去考虑, 1.rabbitMQ的基本概念 ...

  7. java面试一日一题:java线程池

    问题:请讲下java中的线程池 分析:在面试中经常问到线程池的问题,要掌握其基本概念,使用方法,注意事项等,引申下tomcat中默认的线程数是多少 回答要点: 主要从以下几点去考虑, 1.为什么要使用 ...

  8. java面试一日一题:请讲下对mysql的理解

    问题:请讲下对mysql的理解 分析:该问题主要考察对mysql的理解,基本概念及sql的执行流程 回答要点: 主要从以下几点去考虑, 1.mysql的整体架构? 2.mysql中每一个组件的作用? ...

  9. java面试一日一题:java的类加载过程

    问题:请讲下java的类加载机制及过程 分析:该问题主要考察对JVM加载类的机制及过程,延申出的问题是为什么使用双亲委托模型,有什么办法可以打破双亲委托吗: 回答要点: 主要从以下几点去考虑, 1.类 ...

随机推荐

  1. alipay 小程序开发教程

    alipay 小程序开发教程 https://opendocs.alipay.com/mini/00ccmd 或访问开放平台:https://opendocs.alipay.com/mini/00cc ...

  2. element ui 停止维护了

    ️‍♂️ element ui 停止维护了 最近看到有人说 element ui 已经停止维护了,还有点不相信; 不过到 github 验证一下,好像是真的呀 4 个月,没有任何更新了 https:/ ...

  3. uniapp设置不同的主题(Theme)

    App.vue: <style lang="stylus"> @css { html { --primary: blue; --bg-image: url(https: ...

  4. Captain technology INC:全球新能源汽车格局突变

    美国能源信息署EIA的统计数据显示,2020年上半年全美含纯电动和插电混动在内的新能源乘用车总销量仅为11.1万辆,同比缩水25%.虽然特斯拉在第三季度靠着13.93万辆的销量迎来了环比387%.同比 ...

  5. 为什么要抢挖Baccarat流动性挖矿的头矿?头矿的价值是什么?

    今年下半年,DeFi流动性挖矿非常受投资者的欢迎,究其原因,其超高的挖矿回报率着实足够吸引无数投资者的眼球.而即将上线的Baccarat流动性挖矿,也未上线先火了一把.Baccarat是由NGK公链推 ...

  6. 【HTB靶场系列】靶机Carrier的渗透测试

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...

  7. Django Admin 配置和定制基本功能(基本二次开发配置)

    一 列表显示页面  1. list_display,列表时,定制显示的列 @admin.register(models.UserInfo) class UserAdmin(admin.ModelAdm ...

  8. Ctfweb(2)

    CTFwebshow(2): phps源码泄露 思路:第一次接触phps这个后缀,第一眼打开的时候是想着用御剑去扫目录,但是很遗憾没有扫到index.phps,然后用burp抓包返回包信息也没有看到端 ...

  9. POJ1852-换向思考

    蚂蚁碰撞后反向与穿越的时间一样. 穷竭搜索---->想象力 #include<stdio.h> int main(void){ int n,len,ansNum,mintime,ma ...

  10. STL容器整理

    1.vector c++STL中的可变长度数组,主要支持操作有:建立,添加到末尾,返回长度,调整大小,定义迭代器及对迭代器的具体操作.具体如下: 1.建立一个元素类型为int的可变长度数组v,最开始N ...