博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL面试题——数据库优化问题
阅读量:2428 次
发布时间:2019-05-10

本文共 920 字,大约阅读时间需要 3 分钟。

1.SQL优化

1.1如何定位及优化SQL语句的性能问题

对于低性能的SQL语句的定位,最重要也是最有效的办法就是使用执行计划,MySQL提供了explain命令来查看语句的执行计划

在这里插入图片描述
执行计划一般包含下面几个字段的信息:

  • id:表示一个查询中各个子查询的执行顺序,id相同则执行顺序由上至下,id不同,id值越大优先级越高,越先被执行,id为null时表示一个结果集,不需要使用它查询,常出现在union等查询语句中
  • select_type:每个子查询的查询类型,一些常见的查询类型为:
    在这里插入图片描述
  • table:查询的数据表
  • type:访问类型
    • ALL:扫描全表数据
    • index:按索引次序扫描,先读索引,再读实际的行,结果还是全表扫描,主要优点是避免了排序,因为索引是排序好的
    • range:索引范围查找,当索引使用<,>,is null,between,in,like时出现
      在这里插入图片描述
    • ref:按照普通索引查询
    • eq_ref:使用唯一索引查找(主键或唯一索引)
    • const:常量查询,在整个查询过程中这个表最多只会有一条匹配的行
  • possible_key:可能使用的索引,注意不一定会使用。查询涉及到的字段若存在索引,则该索引将被列出来。当该列为NULL时就要考虑当前的SQL是否需要优化了
  • key:显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL

1.2 SQL的生命周期

  1. 应用服务器与数据库建立一个连接
  2. 数据库进程拿到请求SQL
  3. 解析并生成执行计划,执行
  4. 读取数据到内存中并进行逻辑处理
  5. 通过步骤一的连接,发送结果到客户端
  6. 关掉连接,释放资源

1.3 SQL大数据查询如何进行优化

  1. 语法优化:
    • 首先查看有没有致索引失效,导致进行全表查询的地方,比如>,<,is null,!=等,看可不可以去除,如果不行,就在这类操作之前先进行其它条件的过滤
  2. 建索引:对常用且重复率低的字段,建索引
  3. 增加过滤条件
  4. 使用缓存
  5. 对数据库进行读写分离

1.4超大分页怎么处理

主要的优化思路就是:在索引上完成排序分页的操作,最后根据主键关联回表查询所需要的其他列内容,通过索引覆盖在索引上完成扫描和排序,最后通过主键回表查询,最大限度减少回表查询的I/O次数

转载地址:http://phjmb.baihongyu.com/

你可能感兴趣的文章
JavaScriptCore全面解析 (下篇)
查看>>
嵌入式操作系统与物联网演进之路
查看>>
苹果公司揭秘首批列入 Swift 源代码兼容性开源项目清单
查看>>
Python 玩转物联网之 Micropython GPIO IRQ 处理
查看>>
移动周刊第 188 期:Android 安全性要点与规范核心详析
查看>>
手机为基础的 IoT 布局已经失效,下一代操作系统是什么模样?
查看>>
无线传感器网络使用指南
查看>>
Unity 脚本优化的那些坑
查看>>
《近匠》专访机智云 CTO 刘琰——从 0 到 1 开启智能化硬件开发
查看>>
深度对话微软,解读 HoloLens 技术设计细节
查看>>
移动周刊第 191 期:如何看待 Kotlin 成为 Android 官方支持开发语言?
查看>>
物联网浪潮之下,前端工程师如何迎刃而上?
查看>>
从端到云——工业物联网项目全栈快速开发
查看>>
LoRa vs NB-IOT:哪个物联网标准更具优势?
查看>>
移动周刊第 205 期:Google 正式发布 ARCore 预览版、iOS 工程打包速度提升十倍的解决方案...
查看>>
八大 IoT 安全关键技术解析
查看>>
有钱 Python,没钱 PHP,编程语言也嫌贫爱富
查看>>
Docker是啥?容器变革的火花?
查看>>
假如从餐饮店的角度来看架构…
查看>>
这个充电宝太黑科技了,又小又不用自己带线,长见识了~
查看>>