MySQL配置优化
通过配置my.cnf使数据库达到优化的目的。
1、innodb的缓冲池配置
innodb_buffer_pool_size 通常配置服务器内存的60%~70%
2、innodb log缓存配置
innodb_log_buffer_size 这个不宜配置太大,因为日志缓存每秒刷新一次
3、配置缓冲池个数
innodb_buffer_pool_instances
4、在提交事务的时候,是否刷新日志缓存
innodb_flush_log_at_trx_commit 这个很重要,对性能影响较大
这个属性有三个值可选:
- 0:不会主动触发日志缓冲写入磁盘
- 1:(默认项)每次提交事务的时候,同时会把日志缓冲刷新到磁盘
- 2:每次提交事务的时候,会把日志缓冲刷新到磁盘,但是他不同时进行的,而是每秒刷新一次
5、innodb读写IO的线程数
innodb_read_io_threads
innodb_write_io_threads
默认都为4个
6、独立表空间配置
innodb_read_io_threads 默认是打开的
7、查询缓存
query_cache_size
聚合函数优化
MAX
mysql> SELECT MAX(money) FROM t_order;
这里只需给money加上索引即可
COUNT
mysql> SELECT COUNT(user_id = 1 OR NULL) AS A, COUNT(user_id = 2 OR NULL) AS B FROM t_order;
这种方式不用对数据进行分组也可以获取到某个属性的数量
行转列
mysql> SELECT SUM(CASE WHEN u.id = 1 THEN goods_num END) AS A, SUM(CASE WHEN u.id = 2 THEN goods_num END) AS B FROM users u INNER JOIN orders o ON u.id = o.user_id;