数据库优化的问题也是面试可能会问到的问题,据我所知,华为,cvte都问到过这个问题。
数据库优化一般从四个方面出发:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和操作系统,这个顺序也表现了这四个方面对性能的影响。
一、数据库设计
1.适度的反范式,达到适度冗余的效果,避免数据库查询的时候join很多表,导致查询效率低。
2.适当建立索引,索引可以大幅度提高查询速度,但是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的I/O。由于索引的存储结构不同于表的存储,一个表的索引所占的空间比数据所占的空间还打的情况经常发生。
因此,一般索引需要遵循这样的规则:
(1)索引的字段必须是经常作为查询条件的字段;
(2)如果索引多个字段,第一个字段要是经常作为查询条件的。如果只有第二个字段作为查询条件,这个索引不会起到作用;
(3)索引的字段必须有足够的区分度;
(4)MySql对于长字段支持前缀索引;
3.对表进行水平划分,如果一个表中记录数太多,比如上万条,而且需要经常检索,那么就可以对表进行水平划分,当然这需要数据在逻辑上可以划分。同时一个好的拆分依据也是非常重要的。
4.对表进行垂直划分,有写表记录数不多,可能就2、3万条,但是字段却很长,表占用空间很大,检索表时需要执行大量I/O,严重降低了性能。这个时候需要把大的字段拆分成另一个表,并与原表是一对一的关系。
5.选择适当的字段类型,特别是主键:选择字段的一般原则是保小不保大,能用占用字节小的字段就不用大字段。
6.文件、图片等大文件用文件系统存储,不用数据库,数据库只存储路径。
7.外键表示清楚,方便建立索引。
8.选择合适的引擎
二、SQL语句优化
sql语句优化工具:慢日志,它可以记录慢的sql语句;Explain可以看到mysql的执行计划;
三、数据库参数配置
最重要的参数就是内存