mysql优化一般来说是我们面试的必问题目,当然大多数人会脱口而出-->添加索引。
往往面试官听到这个回答并不会感到满意,他们想听的其实是你对优化过程的理解,那么问题来了,如何去优化sql呢?
影响mysql性能的因素
1、服务器系统、CPU、内存,mysql版本以及电脑的处理速度
2、数据库的基础设计(遵循三大范式),sql语句的编写以及索引的合理建立
3、客户或者项目经理频繁变更需求也会影响sql性能
总结:mysql的优化思路为:表结构设计-->sql语句优化-->数据库参数配置(事务日志)-->底层源码-->提高服务器配置(花钱)
优化的思路
- 设计数据库时:数据库表、字段的设计,存储引擎
- 利用好MySQL自身提供的功能,如索引等
- 横向扩展:MySQL集群、负载均衡、读写分离
- SQL语句的优化(收效甚微)
- 善用explain、 profiling进行sql语句分析
数据库字段选择
1.字符串char、varchar、text,char为固定长度,适合存放比如性别、手机号这类固定长度的字段,varchar和text为可变长度,原则上使用text的字段最好剥离出主表,否则影响查询性能,数据索引效率为 char > varchar > text。
2.数字类型(整型)(unsigned 无序号) tinyint,smallint,int,bigint,可根据实际长度进行选择,通常使用int。
3.时间类型的字段 Date,Time,Datetime,时间戳存char、int。
友情提醒:原则上单表字段不宜过多(最好不要超过二三十个),字段尽量避免使用not null,一方面是null占得字节较多,另一方面会导致索引失效。
索引优化
索引之所以那么快,是因为索引多采用Btree索引,而Btree索引采用的是二分查找法(折中查找),从而大大提高查询效率。
在MySQL中,主要有4中类型的索引,分别为:B-Tree索引,Hash索引、Fulltext索引和R-Tree索引。
未完待续...我先保存一下子。