一、优化查询
1.使用索引,避免全表扫描。
2.优化SQL语句。
3.优化数据库对象。
1)拆分表
(1)垂直拆分:把主键和一些列放在一个表中,然后把主键和另外的列放在另一个表中。如果一个表中某些列常用,而另外一些不常用。如果一个表中某些列常用,而另外一些不常用,则 可以采用垂直拆分。
(2)水平拆分:根据一列或多列数据的值把数据行放到两个独立的表中。
2)使用中间表提高查询速度
创建中间表,表结构和源表结构完全相同,转移要统计的数据到中间表,然后在中间表上进行统计,得出想要的结果。
4.硬件优化。
5.MySQL自身优化
指定MySQL查询缓冲区的大小,指定MySQL允许的最大连接进程数等。
https://www.cnblogs.com/200911/p/5869123.html
https://www.cnblogs.com/claireyuancy/p/7258314.html
6.应用优化
1)使用数据库连接池
2)使用查询缓存。
二、大访问量到数据库上,如何优化
1.主从复制,读写分离,负载均衡
配置两台数据库的主从关系,master用于写操作,slaves用于读操作,master通过复制将数据同步到slaves中。原理:
1)master会将数据改变记录到二进制日志(binary log)中。
2)slaves有一个I/O线程不停监听master中的binary log,一旦有更新,会将binary log拷贝进中继日志(relay log)。
主从复制的三种范式:
1)同步复制:master更新binary log后,需等待所有slaves复制更新完成后,才可以自由处理其他事务。
2)异步复制:master无需等待,就可以自由处理其他事务。
3)半同步复制:master只需等待一台slave复制更新完成,就可以自由处理其他事务。
2.数据库分表,分区,分库。
分表:垂直拆分,水平拆分。
分区:把一张表的数据分成多个区块,这些区块可以在一个磁盘,也可以在不同磁盘,分区后,数据散列在多个位置,多块硬盘同时处理不同的请求,从而提高磁盘I/O读写性能。包括水平分区和垂直分区。
分库:根据业务不同把相关的表切分到不同的数据库中。