MySQL数据库优化(五)

时间:2022-09-20 23:52:00

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;