MySQL篇之SQL优化

一、表的设计优化

表的设计优化(参考阿里开发手册《嵩山版》)

  1. 比如设置合适的数值(tinyint int bigint),要根据实际情况选择。

  2. 比如设置合适的字符串类型(char和varchar)char定长效率高,varchar可变长度,效率稍低。

二、SQL语句优化

  1. SELECT语句务必指明字段名称(避免直接使用select * )。

  2. SQL语句要避免造成索引失效的写法。

  3. 尽量用union all代替union union会多一次过滤,效率低。

  4. 避免在where子句中对字段进行表达式操作。

  5. Join优化 能用innerjoin 就不用left join right join,如必须使用 一定要以小表为驱动。

内连接会对两个表进行优化,优先把小表放到外边,把大表放到里边。left join 或 right join,不会重新调整顺序。

三、主从复制、读写分离

如果数据库的使用场景读的操作比较多的时候,为了避免写的操作所造成的性能影响 可以采用读写分离的架构。 读写分离解决的是,数据库的写入,影响了查询的效率。

四、面试的回答

**面试官:**sql的优化的经验

**候选人:**嗯,这个在项目还是挺常见的,当然如果直说sql优化的话,我们会从这几方面考虑,比如:建表的时候、使用索引、sql语句的编写、主从复制,读写分离,还有一个是如果量比较大的话,可以考虑分库分表。

**面试官:**创建表的时候,你们是如何优化的呢?

**候选人:**这个我们主要参考的阿里出的那个开发手册《嵩山版》,就比如,在定义字段的时候需要结合字段的内容来选择合适的类型,如果是数值的话,像tinyint、int 、bigint这些类型,要根据实际情况选择。如果是字符串类型,也是结合存储的内容来选择char和varchar或者text类型。

**面试官:**那在使用索引的时候,是如何优化呢?

候选人:【参考索引创建原则 进行描述】

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

**候选人:**嗯,这个也有很多,比如SELECT语句务必指明字段名称,不要直接使用select * ,还有就是要注意SQL语句避免造成索引失效的写法;如果是聚合查询,尽量用union all代替union ,union会多一次过滤,效率比较低;如果是表关联的话,尽量使用innerjoin ,不要使用用left join right join,如必须使用 一定要以小表为驱动。

相关推荐
PengShuaiD541 分钟前
【数据库维护】如何解决Clickhouse数据库Too many parts报错
数据库·clickhouse
TechNomad1 小时前
C++访问MySQL数据库
数据库·c++·mysql
一个 00 后的码农1 小时前
25轻化工程研究生复试面试问题汇总 轻化工程专业知识问题很全! 轻化工程复试全流程攻略 轻化工程考研复试真题汇总
面试·面试问题·25考研·考研复试·考研调剂·面试真题·轻化工程
数据的世界012 小时前
Deepin(Linux)安装MySQL指南
数据库·mysql
刘小炮吖i2 小时前
Java基础常见的面试题(易错!!)
java·面试·职场和发展
Jack魏2 小时前
Linux MySQL 8.0.29 忽略表名大小写配置
linux·mysql·mysql8·mysql常见问题
拉不动的猪2 小时前
刷刷题17(webpack)
前端·javascript·面试
why技术3 小时前
可以说是一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
后端·面试
Warren983 小时前
Springboot中分析SQL性能的两种方式
java·spring boot·后端·sql·mysql·intellij-idea
左灯右行的爱情3 小时前
Redis-事务
数据库·redis·bootstrap