美文网首页
查询性能优化

查询性能优化

作者: wwwxi | 来源:发表于2017-09-22 18:06 被阅读0次

查询性能优化

1.基本原则:优化数据访问

1)请求了不需要的数据  
    提取超过需要的列  
    多表连接时提取所有列  
2)mysql检查了过多的数据  
    三大指标:执行时间、检查的行数、返回的行数  
    检查的行和返回的行:      
        通常不对应,比如连表查询;  
    检查的行和访问类型  
        mysql会在3中情况下实用where子句,从最好到最坏依次是:        
            对索引查找应用where子句来消除不匹配的行,发生在存储引擎层。  
            使用覆盖索引(extra为“using index”)来避免访问行,并且从索引取得数据后过滤掉不匹配的行。发生在服务器层,但是他不需要从表中读取行。  
            从表中检索出数据,然后过滤掉不匹配的行(在extra列中是“using where”)。发生在服务器端并且要求在过滤之前读取这些行。              
        如果发现访问的数据行数很大,而生成的结果中数据行很少,那么可以尝试更复杂的修改:
            使用覆盖索引,它存储了数据,所以存储引擎不会去获取完整的行  
            更改架构;  
            重写复杂的查询,让mysql的优化器可以以优化的方式执行它。  

2.重构查询的方式

1)复杂查询和多个查询  
    衡量两个之间的关系,是把复杂查询多个化,还是多个查询一个3化  
2)缩短查询  
    举个例子:
    巨大查询 delete from messages where created < data_sub(now(),interval 3 month);  
    应用伪代码查询替代
        rows_affected = 0  
        do {
            rows_affected = do_query(
                "delete from messages where created < date_sub(now(),interval 3 month) limit 10000"
            )
        }   
    对于一个高效的查询来说,一次删除10000行数据的任务已经足够大。足够短的任务对服务器的影响最小。在delete语句中加入休眠语句也是一个好主意,它可以分摊负载,并且减少锁住资源的时间。  

3.分解联接

将多表联查分解为小查询,在客户端进行合并。  
优点:  
    1)缓存的效率更高。  
    2)对myisam表来说,每个表一个查询可以更有效的利用表锁,因为查询会锁住单个表较短时间,而不是把所有表长时间锁住。  
    在应用程序段进行连接可以方便的扩展数据库,把不同的表放在不同的服务器上面。  
    3)查询本身会更高效。  
    可以减少多余的行访问。连接查询是非正则化,反复的访问同一行数据。在应用程序端进行连接意味着对每行数据只会访问一次。  
    4)从某种意义上,可以认为这种方式是手工执行哈希连接,而不是mysql内部执行连接操作时采用的嵌套循环算法。哈希连接效率更高。  
场景(在程序端进行连接效率更高):
    1)可以缓存早期查询的大量数据。  
    2)使用了多个myisam表。  
    3)数据分布在不同的服务器上  
    4)对于大表使用in()替换连接。  
    5)一个连接引用了同一个表很多次。

4.查询执行基础知识

mysql执行查询的一般性过程:
    1)客户端将查询发送到服务器。  
    2)服务器检查查询缓存。如果找到了,就从缓存中返回结果,否则进行下一步。  
    3)服务器解析,预处理和优化查询,生成执行计划。  
    4)执行引擎调用存储引擎api执行查询。  
    5)服务器将结果发送回客户端。   

相关文章

  • MySQL性能调优

    MYSQL查询语句优化 mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬...

  • MySQL性能优化(慢查询)

    1 MySQL性能优化之慢查询 1.1 性能优化的思路 首先需要使用慢查询功能,去获取所有查询时间比较长的SQL语...

  • 《高性能Mysql》-查询优化

    优化性能需要查询优化、索引优化、库表结构优化这三辆马车齐头并进。这篇文章主要围绕查询优化,要对查询进行优化首先需要...

  • Day2:MySQL慢查询基础-查询慢原因

    说在前面: 查询优化、索引优化、库表结构优化是查询性能优化的三驾马车。 完成一个完整的查询生命周期,查询需要在...

  • mysql性能优化-慢查询分析、优化索引和配置

    一、优化概述 二、查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profi...

  • mysql调优

    一 、查询优化、索引优化、库表结构优化 1. 查询性能优化 1.1) 优化数据访问:1、是否向数据库请求了不需要的...

  • mysql性能优化-慢查询分析、优化索引和配置

    目录 一、优化概述 二、查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 pr...

  • MySQL数据库优化总结

    《高性能MySQL》指导 性能优化1.表优化2.索引优化3.查询优化4.服务器优化5.系统与硬件优化 稳定优化1....

  • 性能优化-索引

    概述 索引优化是对查询性能优化最有效的手段,索引能轻易将查询性能提高几个数量级。 索引类型 在Mysql中,索引是...

  • 查询性能优化

    MySQL查询优化器的局限性 关联子查询 MySQL的子查询实现的非常糟糕,最糟糕的一类查询是where条件中包含...

网友评论

      本文标题:查询性能优化

      本文链接:https://www.haomeiwen.com/subject/yjgfextx.html