数据库优化的目的
避免出现页面访问错误
。由于数据库联接timeout产生页面5**错误
。由于慢查询造成页面无法加载
。由于阻塞造成数据无法提交
增加数据库的稳定性
。很多数据库问题都是由于低效的查询引起的
优化用户体验
。流畅页面的访问速度
。良好的网站功能体验
1 SQL及索引(提升性能最大,效率最高)
2 数据库表结构(根据范式设计表结构)
3 系统配置(linux对mysql打开文件数的限制等)
4 硬件(提高文件io的速度,但是成本最高)
io的优化 并不能减少阻塞 ,但sql索引没有优化好,则会产生大量的慢查询或阻塞,这是由于mysql的内部锁机制造成,所以硬件再好效果也不大
mysql对内核是有限制的
演示数据库说明:
使用MySQL提供的sakila数据库,可以通过以下URL获取这个演示数据库
http://dev.mysql.com/doc/index-other.html
sakila数据库的表结构信息可以通过以下网站查看
http://dev.mysql.com/doc/sakila/en/sakila-installation.html
数据库基于MySQL5.5版本,不同MySQL版本的优化器有一定的差别。
mysql 数据库优化
项目中,优化mysql之前,首先要开启慢查询日志,在分析慢查询日志.
开启慢查询日志:
show variables like 'slow%'; //查看慢查询状态
set global slow_query_log_file='/home/mysql/sql_log/mysql-slow.log'; //设置慢查询记录文件的路径
set global log_queries_not_using_indexes=on; //记录未使用索引的查询
set global long_query_time=1; //设置慢查询的时间
set global slow_query_log = on; //开启慢查询日志记录
mysqldumpslow 慢日志的分析工具
个人终结优化思路
![Upload Paste_Image.png failed. Please try again.]
1.SQL及索引
SQL优化:Count()和Max()的优化,子查询的优化,group by的优化,Limit查询的优化
索引优化:选择合适的列建立索引
2.数据库表结构:选择合适的数据类型,数据表的范式化优化,数据表的垂直拆分 水平拆分。
3.系统配置:
4.硬件:云服务