1. MySQL有哪些存储引擎,各有什么特点

  • InnoDB
    MySQL5.5以后的默认引擎,支持行锁、事务和外键,并发写性能高,适合读写较多的业务场景。
  • MyISAM
    MySQL5.5之前的默认引擎,不支持行锁、事务和外键,支持表锁,并发写性能较低,访问速度较快。适合以读和插入为主的业务场景。不适合修改和删除较多的业务场景。
  • Memory
    数据存放在内存中,容易丢失数据。基本上用不到该引擎,可以用Redis等缓存中间件替代。

2. MySQL的索引结构

B+Tree

特点:所有的数据都存在叶子节点,并且相邻的叶子节点都有指针链接。

3. 索引分类

  • 聚集索引
    一般是主键,索引和数据存储在一起,叶子节点保存行数据。
    如果表没有主键,MySQL会以第一个唯一索引作为聚集索引。
    如果表也没有唯一索引,MySQL会自动创建一个rowId作为隐藏的聚集索引。
  • 非聚集索引
    我们手动创建的索引一般都是非聚集索引,索引和数据分开存储,叶子节点保存行对应的主键。

延申问题:加入一个表有主键Id,字段a、字段b、字段c组成,其中A和B建立了联合索引,那么select Id,a,b,c where a=‘1’,是否可以进行优化?
答:可以的,目前的方案由于a和b建立了索引,那么查询a的时候也能在索引中查询到b,而索引的叶子节点存储的是主键,那么Id也可以一次性查出来。而c字段没有索引,叶子节点也不会存储c字段,那么就需要根据叶子节点关联到的主键通过聚集索引去查询行数据,造成了回表查询。
优化方案就是:a、b、c一起建立联合索引,就可以一次查出id,a,b,c四个字段了,避免了回表查询。

4. 索引的设计原则

  1. 针对于数据量较大,且查询比较频繁的表建立索引。
  2. 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。
  3. 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。
  4. 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。
  5. 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
  6. 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。
  7. 如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含NULL值时,它可以更好地确定哪个索引最有效地用于查询。

5. 索引使用原则

最左前缀法则
指的是查询从索引的最左前列开始,并且不跳过中间的列。

避免索引失效
索引失效的几种情况:

  • 模糊查询%在前面
  • 在索引列上进行计算操作,比如截取字符串
  • 范围查询大于或小于,大于或小于右边的列索引会失效(可用大于等于或小于等于代替)
  • or链接的查询,or前后字段都要有索引,否则索引会失效
  • 字符串字段要使用引号,否则索引失效
  • 数据分布范围较小,索引可能失效(比如性别字段建立索引,90条是男10条是女,这时候可能不会用到索引)

覆盖索引
尽量使用覆盖索引, 覆盖索引就是只查询建立索引的字段,减少使用select * (逐渐查询除外),避免回表查询。

前缀索引
当字段类型为varchar、text等时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘O,影响查询效率。此时可以只将字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。

复合索引
尽量使用复合索引,少使用单列索引。如果a,b,c都只创建了单列索引,那么mysql只会选择最优的一个索引使用,而不会把三个字段的索引都用上。如果a,b,c创建了联合索引,那么他们三个字段都会用到索引去查询。

6. SQL性能分析

1. 慢查询日志
配置文件中开启慢查询日志,没有性能问题的话,可以不用开启,因为记录慢查询日志也是会耗费时间的。

##开启慢查询日志
slow_query_log=1##设置慢查询日志时间为2秒,默认10秒,单位:秒
long_query_time=2

2. profile关键字
通过该关键字可以分析出,慢查询具体慢到哪里了。可能的原因有查询结果太大,内存不够用,需要借助磁盘空间、产生了临时表、复制内存中的临时表到磁盘、出现了锁等。

##假如这是一条慢查询sql
SELECT * FROM pms_sku_info WHERE sku_name LIKE '%Apple iPhone 13 (A2634) 星光色 128%';
##查看执行时间和Query_Id
show profiles;
##根据query_id具体分析时间花费在哪里了
show profile for query query_id;
##根据query_id查看sql的cpu使用情况
show profile cpu for query query_id;

3.explain关键字
通过该关键字可以分析sql执行的计划,在查询语句前加上该关键字即可。一些重要指标供参考分析,比如type字段可以看出sql的执行效率、possible_key列出可能会用到的索引、key列出实际用到的索引、rows扫描行数、filtered返回行数与读取行数的百分比等。

mysql优化面试整理-吊打面试官相关推荐

  1. 安卓开发编程实训机构!妈妈再也不用担心我的面试,吊打面试官系列!

    前言 对于很多没有学历优势的人来说,面试大厂是非常困难的,这对我而言,也是一样,出身于专科,原本以为就三点一线的生活度过一生,直到生活上的变故,才让我有了新的想法和目标,因此我这个专科渣渣也奋斗了起来 ...

  2. 含泪狂刷Android面试100题,面试时吊打面试官

    每日一分享,阅读十分钟,和您一起学习

  3. 布尔教育mysql优化_布尔教育燕十八mysql优化视频课件源码分享

    目前数据库是大多数系统进行数据存储的基础组件,数据库的效率对系统的稳定和效率有着至关重要的影响:为了有更好的用户体验,数据库的优化显得异常重要.那么我们要从那些方面对我们的数据库进行优化呢?让我们在& ...

  4. 燕十八 mysql_布尔教育燕十八mysql优化视频课件源码分享

    目前数据库是大多数系统进行数据存储的基础组件,数据库的效率对系统的稳定和效率有着至关重要的影响:为了有更好的用户体验,数据库的优化显得异常重要.那么我们要从那些方面对我们的数据库进行优化呢?让我们在& ...

  5. mysql 触发器条件判断偶尔失效_mysql┃多个角度说明sql优化,让你吊打面试官!...

    ​正文约: 4744字 预计阅读时间: 12分钟 文章首发于我的微信公众号:moon聊技术,欢迎大家关注 mysql┃多个角度说明sql优化,让你吊打面试官! 目录 目录 前言 正文 1.表结构优化● ...

  6. 阿里P8整理Mysql面试题答案,助你“脱颖而出”,吊打面试官!(建议收藏)

    前言 作为一名开发人员,每天英高都在和数据库进行着斗智斗勇,尤其是互联网行业,对MySQL的使用是比较多的.同样的,因为mysql的重要性以及普及性,在面试的时候一定是一个面试的重点或者说常问问题,说 ...

  7. 【转】MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余(收藏系列)

    MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余(收藏系列) 本文公众号来源:JavaKeeper作者:派大新 写在之前:不建议那种上来就是各种面试题罗列,然后背书式的去记忆,对技术 ...

  8. 别看是面试问烂的题目,一面试你照样还是不会系列MySQL四种隔离级别,看完吊打面试官!

    别看是面试问烂的题目,一面试你照样还是不会系列MySQL四种隔离级别,看完吊打面试官! 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也 ...

  9. 吊打面试官!MySQL灵魂100问,你能答出多少?

    推荐阅读: 面试机会不等人,资料看精不看多!史上最全Java技术资料合集! 2019年中总结,400道一线大厂高频精选面试题合集(JVM+Spring+RabbitMQ+Mybatis+Redis+分 ...

最新文章

  1. CVPR2020|Facebook PIFuHD:二维图像生成高质量、高细节三维人物
  2. 移动端实现复制到剪贴板
  3. bilibili有电脑版吗_虚充制冷剂、谎称电脑版故障...空调维修的这些套路,你 中招了吗...
  4. [Tips]Torch功能点记录
  5. 牛客网_PAT乙级1001_A+B和C (15)
  6. Accusoft结构化工具包FormSuite for Structured Forms常见问题解答(二)
  7. 机器视觉传感器选型,交互作用决定取舍
  8. 如何在Ubuntu 20.04 上安装 Xrdp 服务器(远程桌面)
  9. 虚拟空间 配置 服务器,虚拟主机空间可以修改服务器配置吗
  10. 微信回应朋友圈表情包评论关闭:灰度测试;Twitter漏洞波及1700万用户;Ruby 2.7.0发布 | 极客头条...
  11. 台式计算机cpu多好,2019台式处理器排行榜_台式机处理器排行榜 前六强详细介绍...
  12. python编程入门与案例详解-干货|| 清华大佬推荐的python400集入门资料
  13. LaTex使用的一些技巧记录
  14. 计算机录屏幕和声音的软件是什么,电脑录屏软件带声音哪个好用 电脑录屏软件带声音软件...
  15. 怎么用计算机测出来体脂,keep软件测体脂率的在哪 keep怎么测体脂
  16. 已解决The method is not allowed for the requested URL.
  17. Machine Learning | (1) Scikit-learn与特征工程
  18. Transformer计算量和过程统计
  19. CSS兼容性技巧整理--从IE6-IE9 火狐谷歌浏览器兼容
  20. CRM管理系统添加客户

热门文章

  1. 信息安全三要素CIA
  2. order by(排序查询结果)和LIMT
  3. c语言三种循环结构特点,c语言循环结构(c语言循环结构特点)
  4. Fedora 20 的 r8168 与 rtl8723be 驱动
  5. 携手独角兽企业,微软正在用AI打造更美好的未来
  6. Win10+VS2019编译Jpeg源码时缺少win32.mak文件的内容
  7. 实现网页原路返回:从哪个页面跳转过来就返回哪个页面
  8. 国学大师 master of Chinese culture
  9. 无人驾驶车辆纵向速度PID控制
  10. 乘风破浪的技术大咖再次集结 | 腾讯云TVP持续航行中