从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件

MYSQL数据库优化总结

发布:蔺要红09-06分类: MYSQL

硬件优化:

1、内存 96-128G 一台服务器,会跑3-4个实例一般大门户网站,32-64G跑2个实例 2-4颗CPU
2、硬盘 数量越多越好 ,性能:ssd>sas>sata,raid 4块盘为例:RAID0>RAID10对于数据库好
 
软件安装和配置文件优化


1、mysql编译安装优化
2、innodb_buffer_pool_size = 2048M   数据缓存到buffer_pool里,物理内存的%30-%50.
3、innodb_filush_log_at_trx_commit = 2    0和2性能更高 
4、参数的优化幅度很低 my.cnf , 不用过多的追求
 
SQL语句优化

1、大的复杂的SQL语句拆分成多个小的SQL语句,子查询,join连表查询,某一个表4000万两条记录,单表太大,怎么优化都慢,需要架构处理拆表拆库
2、数据库是存储数据的地方,但是不是计算数据的地方,对于数据计算,应用类处理,都要拿到前端应用解决,禁止在数据库上处理 
3、搜索功能,like '%大海%',一般不要用mysql数据库,
4、能批量插入就批量插入
5、使用set profiles 查看SQL语句的执行细节
6、数据库查询尽量不用select *,除非要查所有字段
7、select查询的时候,where条件后面的列类型如果是字符串类型就要加引号,如果是数字类型就不要加引号
8、可以用explain查看select语句执行计划
9、慢查询日志,或者show full processlist 某语句长时间可以看到
 
架构上优化

1、业务的拆分:搜索功能,like '%大海%',一般不要用mysql数据库。
2、业务拆分:某些业务应用使用nosql持久化存储,例如:memcached,redis,ttserver。粉丝关注,好友关系等等   
3、数据库前端必须加cache,例如:memacached 用户登录,商品查询
4、动态数据静态化,整个文件静态化,页面片段静态化。
5、数据库集群与读写分离,一主多从。通过程序或者dbproxy进行集群读写分离。
6、单表超过2000万。拆库拆表 ,人工拆表 拆库(登录、商品、订单)
 
数据库建表和索引优化:


1、能用定长char类型的就不用varchar类型
2、索引的合理使用,如果一个条件列前N个字符已经接近唯一值,就可以对一个列的前N个字符创建索引。不需要对整个列创建索引
3、可以创建联合索引,但要注意前缀特性

 
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站