mysql优化面试整理-吊打面试官
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. 索引的设计原则
- 针对于数据量较大,且查询比较频繁的表建立索引。
- 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。
- 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。
- 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。
- 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
- 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。
- 如果索引列不能存储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优化面试整理-吊打面试官相关推荐
- 安卓开发编程实训机构!妈妈再也不用担心我的面试,吊打面试官系列!
前言 对于很多没有学历优势的人来说,面试大厂是非常困难的,这对我而言,也是一样,出身于专科,原本以为就三点一线的生活度过一生,直到生活上的变故,才让我有了新的想法和目标,因此我这个专科渣渣也奋斗了起来 ...
- 含泪狂刷Android面试100题,面试时吊打面试官
每日一分享,阅读十分钟,和您一起学习
- 布尔教育mysql优化_布尔教育燕十八mysql优化视频课件源码分享
目前数据库是大多数系统进行数据存储的基础组件,数据库的效率对系统的稳定和效率有着至关重要的影响:为了有更好的用户体验,数据库的优化显得异常重要.那么我们要从那些方面对我们的数据库进行优化呢?让我们在& ...
- 燕十八 mysql_布尔教育燕十八mysql优化视频课件源码分享
目前数据库是大多数系统进行数据存储的基础组件,数据库的效率对系统的稳定和效率有着至关重要的影响:为了有更好的用户体验,数据库的优化显得异常重要.那么我们要从那些方面对我们的数据库进行优化呢?让我们在& ...
- mysql 触发器条件判断偶尔失效_mysql┃多个角度说明sql优化,让你吊打面试官!...
正文约: 4744字 预计阅读时间: 12分钟 文章首发于我的微信公众号:moon聊技术,欢迎大家关注 mysql┃多个角度说明sql优化,让你吊打面试官! 目录 目录 前言 正文 1.表结构优化● ...
- 阿里P8整理Mysql面试题答案,助你“脱颖而出”,吊打面试官!(建议收藏)
前言 作为一名开发人员,每天英高都在和数据库进行着斗智斗勇,尤其是互联网行业,对MySQL的使用是比较多的.同样的,因为mysql的重要性以及普及性,在面试的时候一定是一个面试的重点或者说常问问题,说 ...
- 【转】MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余(收藏系列)
MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余(收藏系列) 本文公众号来源:JavaKeeper作者:派大新 写在之前:不建议那种上来就是各种面试题罗列,然后背书式的去记忆,对技术 ...
- 别看是面试问烂的题目,一面试你照样还是不会系列MySQL四种隔离级别,看完吊打面试官!
别看是面试问烂的题目,一面试你照样还是不会系列MySQL四种隔离级别,看完吊打面试官! 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也 ...
- 吊打面试官!MySQL灵魂100问,你能答出多少?
推荐阅读: 面试机会不等人,资料看精不看多!史上最全Java技术资料合集! 2019年中总结,400道一线大厂高频精选面试题合集(JVM+Spring+RabbitMQ+Mybatis+Redis+分 ...
最新文章
- CVPR2020|Facebook PIFuHD:二维图像生成高质量、高细节三维人物
- 移动端实现复制到剪贴板
- bilibili有电脑版吗_虚充制冷剂、谎称电脑版故障...空调维修的这些套路,你 中招了吗...
- [Tips]Torch功能点记录
- 牛客网_PAT乙级1001_A+B和C (15)
- Accusoft结构化工具包FormSuite for Structured Forms常见问题解答(二)
- 机器视觉传感器选型,交互作用决定取舍
- 如何在Ubuntu 20.04 上安装 Xrdp 服务器(远程桌面)
- 虚拟空间 配置 服务器,虚拟主机空间可以修改服务器配置吗
- 微信回应朋友圈表情包评论关闭:灰度测试;Twitter漏洞波及1700万用户;Ruby 2.7.0发布 | 极客头条...
- 台式计算机cpu多好,2019台式处理器排行榜_台式机处理器排行榜 前六强详细介绍...
- python编程入门与案例详解-干货|| 清华大佬推荐的python400集入门资料
- LaTex使用的一些技巧记录
- 计算机录屏幕和声音的软件是什么,电脑录屏软件带声音哪个好用 电脑录屏软件带声音软件...
- 怎么用计算机测出来体脂,keep软件测体脂率的在哪 keep怎么测体脂
- 已解决The method is not allowed for the requested URL.
- Machine Learning | (1) Scikit-learn与特征工程
- Transformer计算量和过程统计
- CSS兼容性技巧整理--从IE6-IE9 火狐谷歌浏览器兼容
- CRM管理系统添加客户