硬件优化:
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、可以创建联合索引,但要注意前缀特性