MYSQL数据库查询优化总结

关系型数据库查询的瓶颈:

1.      磁盘IO(最主要的)——使用聚簇索引,减少多次IO

        在mysql中,一次IO会将要查询数据的前后几页一并带入到内存中,查询的数据顺序和数据在物理存储的位置顺序一致,则会在内存进行查询,减少了IO,这个速度是非常快的。

2.      索引优化——尽量做到3星索引(覆盖索引),避免多个范围条件,去除冗余和重复索引

         索引的优点:1)大大减少了服务器需要扫描的数量

                             2)可以帮助服务器避免排序和临时表

                             3)索引可以将随机IO变为顺序IO

         建立一个好的索引有以下几个原则:

                             1)选择性越高越好。索引的选择性是指该字段中  不重复值/总记录数。选择性高的索引可以让MYSQL在查找时过滤掉更多的行。

                             2)建立合适顺序的多列索引。在大多查询中,对于条件的限制不止一列,这个时候就需要建立合适的多列索引,最优先的原则是避免随机IO和排序。在不考虑这两个的情况下,选择性高的排在前面通常是很好的。

                             3)避免随机IO。使用聚簇索引能够很好的避免随机IO,避免随机IO能够极大的提升密集型应用的性能。

3.      查询方式优化——切分查询,分解复杂查询,优化特定查询类型

项目优化的例子:

1.      查询的时候按F1字段查,就在插入SQL表的时候按物理顺序

force index(PRIMARY)强行插入 F1字段(select字段时会慢,但是会把你需要的东西放在内存里,会加快查询的速度)

即in  3000 条数据在同一个物理块上  减少了磁盘IO

 

2.      如果字段较少,则使用覆盖索引便可以达到按字段从新在物理快上排序

 

3.      重新改表的结构,是在一个index中有多个表按公司ID查询,无法做到在插入的时候force index(PRIMARY),表1物理同步了,但是表2没有。

特殊情况:表2如果是覆盖索引,那么多次访问就会在内存里,速度就会很快。

所以要把所有的表都做到按照F1进行物理排序,插入时也用物理排序。

 

4.      在有KEY LIST 的业务时,应该以KEY作为表的主键,进行聚集,这样能够一次IO查完。

 

你可能感兴趣的:(mysql,数据库,mysql,database)