网站跳出率一般多少,网站开发工作容易出现的失误,wordpress js合并,山东东成建设咨询有限公司网站MySQL调优分析
explain#xff1b;show status查看服务器状态信息
优化
减少子任务#xff0c;减少子任务执行次数#xff0c;减少子任务执行时间#xff08;优#xff0c;少#xff0c;快#xff09;
查询优化分析方法
1#xff0e;访问了太多的行和列#xff1…MySQL调优分析
explainshow status查看服务器状态信息
优化
减少子任务减少子任务执行次数减少子任务执行时间优少快
查询优化分析方法
1访问了太多的行和列确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行但有时候也可能是访问了太多的列。 2分析了太多的数据行确认 MySQL服务器层是否在分析大量超过需要的数据行。
sql优化
1.减少查询的记录使用select语句查询大量结果然后再获取前N行如新闻网站取100条记录只显示前面的10条取最值这时可以使用limitlimit 110从1开始10行
2.减少查询的列不要总是SELECT *取出全部列会额外消耗I/O、内存CPU。
3.重复查询相同的数据可以将数据缓存起来需要再取出 4.切分查询有时需要将大查询切分为多个小查询。
删除旧数据
定期地清除大量数据时如果用一个大的语句一次性完成的话则可能需要一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小的但重要的查询。将一个大的 DELETE语句切分成多个较小的查询可以尽可能小地影响MySQL性能同时还可以减少MySQL复制的延迟。 分解关联查询 查询执行的基础
5.尽量用外连接代替子查询通过测试来验证
6.尽量不要排序文件排序很损耗性能尽量使用索引排序。
7.尽量不要使用in会导致全表扫描可以用between
确定了查询只返回需要的数据后看是否扫描了额外的数据 查询开销
对于MySQL最简单的衡量查询开销的三个指标如下: 1.响应时间
2.扫描的行数
3.返回的行数 如果发现查询需要扫描大量的数据但只返回少数的行那么通常可以尝试下面的技巧去优化它: 1.使用索引覆盖扫描把所有需要用的列都放到索引中这样存储引擎无须回表获取对应行就可以返回结果了。 2.改变库表结构。例如使用单独的汇总表。 3.重写这个复杂的查询让 MySQL优化器能够以更优化的方式执行这个查询。 查询执行的过程 查询过程
1客户端发送一条查询给服务器。 2服务器先检查查询缓存如果命中了缓存则立刻返回存储在缓存中的结果。否则 进入下一阶段。 3服务器端进行SQL解析、预处理再由优化器生成对应的执行计划。
4. MySQL根据优化器生成的执行计划调用存储引擎的API来执行查询。
5将结果返回给客户端。 Mysql客服端/服务端通信协议
“半双工”的同一时刻只能一方发送数据 查询状态
Show full processlist返回结果的command列为当前状态 查询缓存 在解析一个查询语句之前如果查询缓存是打开的那么MySQL会优先检查这个查询是否命中查询缓存中的数据。这个检查是通过一个对大小写敏感的哈希查找实现的。查询和缓存中的查询即使只有一个字节不同那也不会匹配缓存结果#这种情况下查询就会进入下--阶段的处理。
如果当前的查询恰好命中了查询缓存那么在返回查询结果之前MySQL会检查一次用户权限。这仍然是无须解析查询SQL语句的因为在查询缓存中已经存放了当前查询需要访问的表信息。如果权限没有问题MySQL会跳过所有其他阶段直接从缓存中拿到结果并返回给客户端。这种情况下,查询不会被解析,不用生成执行计划,不会被执行。 查询优化处理
查询的生命周期的下一步是将一个SQL转推成一个执行计划MySQL再依照这个执行计划和存储引擎进行交互。这包括多个子阶段:解析SQL、预处理、优化SQL执行计划。这个过程中任何错误例如语法错误都可能终止查询。
语法解析器和预处理 首先MySQL通过关键字将SQL语句进行解析并生成一棵对应的“解析树”。MySQL解析器将使用MySQL语法规则验证和解析查询。例如它将验证是否使用错误的关键字或者使用关键字的顺序是否正确等再或者它还会验证引号是否能前后正确匹配。 预处理器则根据一些MySQL规则进一步检查解析树是否合法例如这里将检查数据表和数据列是否存在还会解析名字和别名看看它们是否有歧义。 下一步预处理器会验证权限。这通常很快除非服务器上有非常多的权限配置。
查询优化器 现在语法树被认为是合法的了并且由优化器将其转化成执行计划。一条查询可以有很多种执行方式最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。MySQL使用基于成本的优化器它将尝试预测一个查询使用某种执行计划时的成本并选择其中成本最小的一个。最初成本的最小单位是随机读取一个4K数据页的成本后来成本计算公式变得更加复杂并且引入了一些“因子”来估算某些操作的代价如当执行一次MERE条件比较的成本。可以通过查询当前会话的Last_query_cost的值来得知MySQL计算的当前查询的成本。
Mysql能处理的优化类型
重新定义关联表的顺序
将外连接转化为内连接
使用等价变换规则
优化countminmax
预估并转换为常数表达式
覆盖索引扫描
子查询优化
提前终止查询
等值传播
列表in的比较 执行关联查询
当前MySQL关联执行的策略很简单:MySQL对任何关联都执行嵌套循环关联操作即MySQL先在一个表中循环取出单条数据然后再嵌套循环到下一个表中寻找匹配的行依次下去直到找到所有表中匹配的行为止。然后根据各个表匹配的行返回查询中需要的各个列。MySQL会尝试在最后一个关联表中找到所有匹配的行如果最后一个关联表无法找到更多的行以后MySQL返回到上一层次关联表看是否能够找到更多的匹配记录依此类推迭代执行。 关于MylSAM的神话
MyISAM的COUNT()函数总是非常快,不过这是有前提条件的即只有没有任何WHERE条件的COUNT(*)才非常快,因为此时无须实际地去计算表的行数。MySQL可以利用存储引擎的特性直接获得这个值。如果 MySQL 知道某列col不可能为NULL值那么MySQL内部会将COUNT(col)表达式优化为COUNT(*)。 优化关联查询 使用用户自定义变量