最近面试, 感觉数据库优化肯定会问, 所以就自己先总结一下. 网上别人说的是他们的方案, 我现在接触到的就这么多.
数据库优化
-
搭建主从数据库, 数据库读写分离, 负载均衡.
-
数据库引擎的选择, innodb因为是B+树, 数据都是存放在了叶子节点, 而且层数很小, 所以对于磁盘的IO次数就少了, 能够减少对硬盘的读写, 加快存取速度. 而且innodb支持实务, 而myisam不支持实务, 但ISAM执行读取操作的速度很快, 还有就是, InnoDB不支持FULLTEXT类型的索引. 所以需要根据项目的需求来选择合适的数据库引擎.
-
选择完了数据库的引擎, 就开始建表, 对于数据大的表, 可以选择水平分表, 生成多个表, 加快查询速度, 还有一些细节, 如: not null, tiny intval, 最重要的是索引: 索引覆盖, 组合索引, 多用explain查看是否使用了索引, 索引值适合分散度高的字段, 像男女用索引了也没什么用. 还有就是想
like %aaa
这样的语句, 是用不了索引的. 所以要避免这样的sql语句. -
sql语句, 代码要规范, 统一的规则写sql语句, 有利于sql语句的命中, 命中了sql速度会快很多的. 是从缓存中查到结果, 而不是根据索引. 尽量避免使用
select *
这样的语句, 避免使用mysql自带的函数, 如 rand(), 完全可以使用php的函数来代替. -
代码部分, 首先考虑的是, 在满足需求的情况下, 降低代码复杂度, 减少对数据库的查询和写入.
-
还有就是重要的, 利用缓存, 有效的降低了数据的查询.
-
此外, 也可以使用一些第三方平台的工具, 如:sola, sphinx来处理海量的数据, 达到快速查询的目的.