一,优化查询的方法都有哪些?

1.使用索引:
应尽量避免全表扫描,首先应考虑在 where 及 order by ,group by 涉及的列上建立索引。
2.优化sql语句:

  • 2.1 通过 explain(查询优化神器)用来查看 SQL 语句的执行效果, 可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。
  • 2.2 任何地方都不要使用 select * from t ,用具体的字段列表代 替“*”,不要返回用不到的任何字段。
  • 2.3 不在索引列做运算或者使用函数。
  • 2.4 查询尽可能使用 limit 减少返回的行数,减少数据传输时间和 带宽浪费。

3优化数据库对象:

  • 3.1 优化表的数据类型
    使用 procedure analyse()函数对表进行分析,该函数可以对表 中列的数据类型提出优化建议。能小就用小。表数据类型第一个原则是:使用能正确的表示和存储数据的最短类型。这样可以减少对磁盘空间、内存、cpu 缓存的使用。使用方法:select * from 表名 procedure analyse();
  • 3.2 对表进行拆分
    1.垂直拆分 :把主键和一些列放在一个表中,然后把主键和另外的列放在另 一个表中。如果一个表中某些列常用,而另外一些不常用,则可以 采用垂直拆分。
    2.水平拆分: 根据一列或者多列数据的值把数据行放到二个独立的表中。
  • 3.3 使用中间表来提高查询速度
    创建中间表,表结构和源表结构完全相同,转移要统计的数据 到中间表,然后在中间表上进行统计,得出想要的结果。

4.硬件优化

  • 4.1 CPU 的优化:选择多核和主频高的 CPU。
  • 4.2 内存的优化:使用更大的内存。将尽量多的内存分配给 MYSQL 做缓存。
  • 4.3 磁盘 I/O 的优化
    • 4.3.1 使用磁盘阵列
    • 4.3.2 调整磁盘调度算法

5.MySQL 自身的优化
对 MySQL 自身的优化主要是对其配置文件 my.cnf 中的各项参数 进行优化调整。如指定 MySQL 查询缓冲区的大小,指定 MySQL 允 许的最大连接进程数等。
6.应用优化

  • 6.1 使用数据库连接池
  • 6.2 使用查询缓存
    它的作用是存储 select 查询的文本及其相应结果。如果随后收到 一个相同的查询,服务器会从查询缓存中直接得到查询结果。查询 缓存适用的对象是更新不频繁的表,当表中数据更改后,查询缓存 中的相关条目就会被清空。

二,当有一个特别大的访问量到数据库上,如何优化?

1.使用优化查询的方法
2.主从复制,读写分离,负载均衡
目前,大部分的主流关系型数据库都提供了主从复制的功能,通过配置两台(或多台) 数据库的主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站可 以利用数据库的这一功能,实现数据库的读写分离,从而改善数据库的负载压力。
利用数据库的读写分离,Web 服务器在写数据的时候,访问主数据库(Master),主 数据库通过主从复制机制将数据更新同步到从数据库(Slave),这样当 Web 服务器读数据的时候,就可以通过从数据库获得数据。
数据库专题(优化查询)
主从复制的原理:
(1)master 将数据改变记录到二进制日志(binary log)中,也即是配置文件 log-bin 指定 的文件(这些记录叫做二进制日志事件,binary log events)
PS:从图中可以看出,Slave 服务器中有一个I/O线程(I/O Thread)在不停地监听 Master 的二进制日志(Binary Log)是否有更新:如果没有它会睡眠等待 Master 产生新的日志事件; 如果有新的日志事件(Log Events),则会将其拷贝至 Slave 服务器中的中继日志(Relay Log)。
(2).slave 将 master 的二进制日志事件(binary log events)拷贝到它的中继日志(relay log)。
(3).slave 重做中继日志中的事件,将 Master 上的改变反映到它自己的数据库中。,所 以两端的数据是完全一样的。
PS:从图中可以看出,Slave 服务器中有一个 SQL 线程(SQL Thread)从中继日志读 取事件,并重做其中的事件,从而更新 Slave 的数据,使其与 Master 中的数据一致。只要 该线程与 I/O 线程保持一致,中继日志通常会位于 OS 的缓存中,所以中继日志的开销很小。
数据库专题(优化查询)
主从复制的几种方式:

  • 1.同步复制:
    主服务器在将更新的数据写入它的二进制日志(Binlog)文件中后,必须等待验证所 有的从服务器的更新数据是否已经复制到其中,之后才可以自由处理其它进入的事务处理请求。
  • 2.异步复制
    主服务器在将更新的数据写入它的二进制日志(Binlog)文件中后,无需等待验证更 新数据是否已经复制到从服务器中,就可以自由处理其它进入的事务处理请求。
  • 3.半同步复制
    主服务器在将更新的数据写入它的二进制日志(Binlog)文件中后,只需等待验证其 中一台从服务器的更新数据是否已经复制到其中,就可以自由处理其它进入的事务处理请 求,其他的从服务器不用管。

3.数据库分表,分区,分库
分区:就是把一张表的数据分成多个区块,这些区块可以在一个磁盘上,也可以在不同 的磁盘上,分区后,表面上还是一张表,但数据散列在多个位置,这样一来,多块硬盘同 时处理不同的请求,从而提高磁盘 I/O 读写性能,实现比较简单。 包括水平分区和垂直分 区。
分库:是根据业务不同把相关的表切分到不同的数据库中,比如 web、bbs、blog 等库。

相关文章: