数据库优化的目的
避免出现页面访问错误
- 由于数据库连接timeout阐述页面5xx错误
- 由于慢查询造成页面无法加载
- 由于阻塞造成数据无法提交
增加数据库的稳定性
- 很多数据库问题都是由于低效的查询引起的
优化用户体验
- 流畅页面的访问速度
- 良好的网站功能体验
可以从几个方面进行数据库优化
优化无非是从三个角度入手:
- 第一个是从硬件,增加硬件,增加服务器
- 第二个就是对我们的MySQL服务器进行优化,增加缓存大小,开多端口,读写分离
- 第三个就是我们的应用优化,建立索引,优化SQL查询语句,建立缓存等等
MySQL服务器硬件和OS(操作系统)调优:
- TODO…
MySQL 系统配置:
- 开启查询缓存
MySQL 表结构优化:
- 选择合适的存储引擎
- 在数据列上加上索引(不要过度使用索引,评估你的查询)
- 有节制的使用触发器
- 注意你的数据类型,尽可能的使用最小的
SQL查询及索引优化:
- 使用慢查询日志slow-log,找出执行慢的查询
- 使用 EXPLAIN 来决定查询功能是否合适
- 避免在整个表上使用count(*) ,它可能会将整个表锁住,最好 count一个字段,比如count(id),或者count(1)
- 最小化你要查询的数据,只获取你需要的数据,通常来说不要使用 *
- 当只要一行数据时使用LIMIT1
- 避免使用 ORDER BY RAND()
- 这些操作都是比较耗资源的DISTINCT、COUNT、GROUP BY、各种MySQL函数。
- 合理的建立索引,为搜索字段建索引,在 WHERE、GROUP BY 和 ORDER BY 的列上加上索引
- 在Join表的时候使用相当类型的例,并将其索引
- 保证索引简单,不要在同一列上加多个索引
- 使用索引字段和 ORDER BY 来代替 MAX
- 当服务器的负载增加时,使用SHOW PROCESSLIST来查看慢的/有问题的查询。