背景:
1.本人java程序员
2.最近在面试高级开发岗位
3.之前项目主要用的oracle,mysql用的较少,面试的公司基本是使用mysql的
4.本人在数据库比较薄弱的
5.最近在看《高性能mysql》
6.不仅是面试的问题,自己也想在这方面有所提高
--------分割线----------------
问题:
在面试中都会问到数据库查询优化和数据库整体优化的相关问题。
我在面试中的回答:
1.select少用*,只使用需要使用的字段
2.尽量少使用关联查询,适当的对一些字段进行数据冗余
3.对一些最常用查询字段,可以考虑使用索引(面试官一般也会问下有哪些索引类型,索引的数据结构B树,索引失效等问题)
4.mysql可以使用explain,检查sql的查询性能,通过key可以看到查询使用到的索引,type看到是全表扫描还是索引扫描等,尽量使sql通过索引查询
所以想问问大家,我的回答有哪些问题,可以从哪些方面回答,有哪些可以学习的方向?
整体优化,需考虑 磁盘选择(机械、固态)、mysql关键参数(buffer pool,事务日志写方式等)、存储引擎、分库分表、读写分离、慢查询日志等。
sql语句方面,主要就是索引、批量插入、执行计划和HINTS、表关联个数限制、等价重写等。
统计类型的数据,可以考虑定时计算好结果,用空间换时间。
以上内容,大部分在《高性能mysql》这本书上都提到过,值得认真读、实践验证。