`
eimhee
  • 浏览: 2150835 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 执行计划优化

    博客分类:
  • JAVA
 
阅读更多

一条简单的SQL 语句竟花了15.87 sec,

 

写道
mysql> SELECT x.loc AS loc, x.lastmod AS lastmod, x.changefreq AS changefreq, x.changecount AS changecount, x.priority AS priority, x.language AS language, x.ac cess AS access, x.status AS status FROM xmlsitemap x WHERE (x.access = '1') AND (x.status = '1') ORDER BY x.language DESC, x.loc ASC LIMIT 5 OFFSET 455000 ; +-------------+------------+------------+-------------+----------+----------+--------+--------+ | loc | lastmod | changefreq | changecount | priority | language | access | status | +-------------+------------+------------+-------------+----------+----------+--------+--------+ | node/539675 | 1361158321 | 0 | 0 | 0.8 | und | 1 | 1 | | node/539676 | 1361158321 | 0 | 0 | 0.8 | und | 1 | 1 | | node/539677 | 1361158321 | 0 | 0 | 0.8 | und | 1 | 1 | | node/539678 | 1361158321 | 0 | 0 | 0.8 | und | 1 | 1 | | node/539679 | 1361158321 | 0 | 0 | 0.8 | und | 1 | 1 | +-------------+------------+------------+-------------+----------+----------+--------+--------+ 5 rows in set (15.87 sec)

 

 

分析一下执行计划

 

写道
mysql> explain SELECT x.loc AS loc, x.lastmod AS lastmod, x.changefreq AS changefreq, x.changecount AS changecount, x.priority AS priority, x.language AS langua ge, x.access AS access, x.status AS status FROM xmlsitemap x WHERE (x.access = '1') AND (x.status = '1') ORDER BY x.language DESC, x.loc ASC LIMIT 50 OFFS ET 455000; +----+-------------+-------+------+-------------------+-------------------+---------+-------------+--------+-----------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+-------------------+-------------------+---------+-------------+--------+-----------------------------+ | 1 | SIMPLE | x | ref | access_status_loc | access_status_loc | 2 | const,const | 266873 | Using where; Using filesort | +----+-------------+-------+------+-------------------+-------------------+---------+-------------+--------+-----------------------------+ 1 row in set (0.00 sec)

 

 

从执行计划中可以看到,用到了Using filesort

Using filsort文档中的解释:
Mysql需要额外的一次传递,以找出如何按排序顺序检索行,通过根据联接类型浏览所有行并为所有匹配where子句的行保存排序关键字和行的指针来完成排序,然后关键字被排序,并按排序顺序检索行。额外的传递是指什么?

 

简单修改去掉

ORDER BY x.language DESC,

 

分析执行计划

 

写道
mysql> explain SELECT x.loc AS loc, x.lastmod AS lastmod, x.changefreq AS changefreq, x.changecount AS changecount, x.priority AS priority, x.language AS langua ge, x.access AS access, x.status AS status FROM xmlsitemap x WHERE (x.access = '1') AND (x.status = '1') ORDER BY x.loc ASC LIMIT 5 OFFSET 455000; +----+-------------+-------+------+-------------------+-------------------+---------+-------------+--------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+-------------------+-------------------+---------+-------------+--------+-------------+ | 1 | SIMPLE | x | ref | access_status_loc | access_status_loc | 2 | const,const | 266873 | Using where | +----+-------------+-------+------+-------------------+-------------------+---------+-------------+--------+-------------+ 1 row in set (0.00 sec)

 

 

没有用到Using filsort

 

写道
mysql> SELECT x.loc AS loc, x.lastmod AS lastmod, x.changefreq AS changefreq, x.changecount AS changecount, x.priority AS priority, x.language AS language, x.ac cess AS access, x.status AS status FROM xmlsitemap x WHERE (x.access = '1') AND (x.status = '1') ORDER BY x.loc ASC LIMIT 5 OFFSET 455000; +-------------+------------+------------+-------------+----------+----------+--------+--------+ | loc | lastmod | changefreq | changecount | priority | language | access | status | +-------------+------------+------------+-------------+----------+----------+--------+--------+ | node/539675 | 1361158321 | 0 | 0 | 0.8 | und | 1 | 1 | | node/539676 | 1361158321 | 0 | 0 | 0.8 | und | 1 | 1 | | node/539677 | 1361158321 | 0 | 0 | 0.8 | und | 1 | 1 | | node/539678 | 1361158321 | 0 | 0 | 0.8 | und | 1 | 1 | | node/539679 | 1361158321 | 0 | 0 | 0.8 | und | 1 | 1 | +-------------+------------+------------+-------------+----------+----------+--------+--------+ 5 rows in set (1.14 sec)

                                                                                                                                                     

只用1.14 sec就执行完了, 快了很多倍!

 

 

2
5
分享到:
评论

相关推荐

    95 MySQL是如何根据成本优化选择执行计划的?(中).pdf

    MySQL数据库系统中,查询优化器是负责生成和选择执行计划的关键组件,其工作原理是基于成本的优化。执行计划决定了如何以最快的速度从数据库中获取数据,是整个数据库性能优化中至关重要的一环。在MySQL中,执行计划...

    MySQL SQL执行计划分析与优化方案.pptx

    MySQL SQL 执行计划分析与优化方案 MySQL SQL 执行计划分析与优化方案是数据库性能优化的关键步骤。通过分析 SQL 执行计划,可以了解 MySQL 是如何执行查询的,并且可以根据执行计划来优化查询性能。下面将对 MySQL...

    行业-97 MySQL是如何基于各种规则去优化执行计划的?(上).rar

    首先,**索引优化**是MySQL执行计划优化的关键部分。当查询涉及到表扫描时,如果没有合适索引,MySQL可能需要全表扫描,这在大数据量下极其低效。MySQL支持多种类型的索引,如B-TREE、HASH、R-tree等,每种索引在...

    MySQL执行计划解读

    ■ MySQL执行计划调用方式 ■ 执行计划包含的信息 ■ 执行计划显示内容解读 ■ Q&A 通过执行计划可以了解什么

    mysql 索引与执行计划

    ### MySQL 索引与执行计划 #### 一、索引与执行计划 ##### 1.1 索引入门 在深入探讨之前,我们首先需要理解什么是索引以及其重要性。 ###### 1.1.1 索引是什么 索引(Index)在MySQL中是一种帮助数据库高效获取...

    mysql 执行计划

    MySQL执行计划是数据库管理员和开发人员用来优化查询性能的关键工具。它揭示了MySQL如何解析SQL语句、如何处理数据以及如何使用索引。通过理解执行计划,我们可以更好地了解查询的内部工作原理,从而进行必要的调整...

    sql性能优化及实例

    减少数据访问,返回更少数据,减少交互次数,减少服务器CPU开销,利用更多资源。注意:这个是对《sql性能优化分享》的后期修改与补充。下载这个最新的就下载老的了。别下载重复了!!!

    mysql文档执行计划

    在数据库查询优化领域,理解MySQL执行计划是至关重要的技能之一。执行计划,也称为查询计划或查询执行计划,是MySQL优化器为执行SQL查询所选择的一系列步骤。它揭示了数据库如何处理查询,包括数据访问方法、表的...

    第四节 mysql 执行计划

    在IT行业中,数据库管理是至关重要的,而MySQL作为一款广泛使用的开源关系型数据库管理系统,其性能优化和查询效率提升往往离不开对执行计划的理解与运用。本节我们将深入探讨"第四节 mysql 执行计划",主要关注如何...

    MYSQL执行计划及索引最佳实践

    MySQL执行计划是MySQL处理SQL查询的方式,它提供了关于SQL语句如何被优化和执行的信息。通过理解执行计划,可以有效地优化SQL查询,提高数据库性能。 ##### 1.1 EXPLAIN SQL `EXPLAIN` 命令用于分析SQL查询的执行...

    MySQL执行计划选择-成本模型v1.11

    MySQL执行计划选择-成本模型v1.11 MySQL执行计划选择-成本模型v1.11是关系型数据库中执行计划选择的重要组成部分。执行计划选择是指数据库管理系统在执行查询语句时,选择合适的执行路径来提高查询效率的过程。...

    通过分析SQL语句的执行计划优化SQL(总结)

    在不同的数据库系统中,如MySQL、Oracle、SQL Server等,都有相应的命令或工具用于查看SQL语句的执行计划,例如SQL Server的`SET SHOWPLAN_ALL`或`SET SHOWPLAN_TEXT`,Oracle的`EXPLAIN PLAN`。 4. **执行计划的...

    Mysql 执行计划解读

    MySQL执行计划是数据库查询优化中不可或缺的一部分,它能够详细展示SQL查询的执行方式,帮助数据库管理员和开发人员深入理解查询的内部细节,从而对查询进行优化。执行计划通过EXPLAIN关键字来获取,它会对SELECT...

    MySQL架构执行与SQL性能优化 MySQL高并发详解 MySQL数据库优化训练营四期课程

    MySQL架构执行与SQL性能优化-MySQL高并发详解课程,课程的目标简单明确,核心就是MySQL的性能优化与高并发。课程内容进行了精华的浓缩,有四大内容主旨,MySQL架构与执行流程,MySQL索引原理详解,MySQL事务原理与...

    96 MySQL是如何根据成本优化选择执行计划的?(下).pdf

    在讨论MySQL如何根据成本优化选择执行计划的问题时,我们首先要清楚执行计划优化的核心在于对SQL查询进行成本估算,而这种估算的目的在于选择一个成本最低的执行方案。成本估算并非易事,因为要精确预估不同访问方法...

    【大厂面试题】MySQL执行计划及SQL优化

    【大厂面试题】MySQL执行计划及SQL优化 知识点标签:explain、sql优化、索引、sql性能问题 题目描述 MySQL执行计划及SQL优化 1.SQL语句表头运行一个explain时,执行后所显示的表头字段如下: id : select查询的...

    MySQL执行计划详解及其应用技巧

    本文档详细解析了MySQL执行计划的各种特性以及具体操作参数的含义,涵盖不同类型的SQL执行情况(简单查询、子查询等),以及各类访问方法的具体含义。通过解释ID、类型和附加信息等相关字段的功能来展示SQL查询执行...

    94 MySQL是如何根据成本优化选择执行计划的?(上).pdf

    在数据库执行查询时,可以存在多种查询计划可供选择,优化器的任务就是从中选择成本最低的执行计划,以保证查询速度最快。在探讨这个过程之前,我们需要先了解MySQL优化器如何评估成本。 首先,MySQL查询的成本主要...

    mysql 执行计划详解

    MySQL执行计划是数据库管理员和开发人员优化SQL查询性能的关键工具。它揭示了MySQL如何解析查询,确定数据检索的顺序,以及使用哪些索引。在本文中,我们将深入探讨MySQL执行计划,了解其重要性,如何生成,以及如何...

Global site tag (gtag.js) - Google Analytics