8.2 sql语句优化

大致内容如下:

8.2.1:SELECT语句的优化

8.2.2:优化子查询,派生表和试图引用

8.2.3:优化INFORMATION_SCHEMA查询

8.2.4:优化数据改变语句

8.2.5:优化数据库权限

8.2.6:其他优化建议

数据库应用的核心逻辑是完成sql语句的执行,sql语句可以直接提交或者通过API后台提交。该部分指南帮助提高各种mysql应用的执行速度。指导包括了通过sql操作的数据读写,一般sql操作的幕后开销,和特别场景下的操作指导,如数据库监控。

8.2.1 优化SELECT 语句;

大致内容包括:

1.1where条件的优化

1.2Range优化

1.3索引合并的优化

1.4Engine Condition Pushdown Optimization(引擎条件压入优化)#翻译不准确

1.5index Condition Pushdown Optimization(索引条件压入优化)#翻译不准确

1.6Nested-Loop Join Algorithms(嵌套循环连接算法)

1.7Nested Join Optimization(嵌套连接优化)

1.8左连接和右连接的优化

1.9简单化外连接

1.10多范围读取的优化

1.11Block Nested-Loop and Batched Key Access Joins(块状嵌套循环和接入批量key的连接)#翻译不准确

1.12is null优化

1.13order by 优化

1.14group by 优化

1.15DISTINCT 优化

1.16limit 查询优化

1.17函数调用优化

1.18行结构表达式优化

1.19避免全表扫描

以select语句形式的查询,在数据库中完成全部的操作。是否能够在动态页面里达到秒级响应或者是通过分时运行来生成跨夜的报告,首先要考虑的就是调整这些语句。

除了查询语句外,对于查询语句调整的技术也使用在例如CREATE TABLE ... AS SELECT,INSERT INTO ... SELECT 以及在DELETE语句中出现的where条件中。这些语句因为结合了读和写操作,所以需要额外考虑性能。

NDB集群支持一个join pushdown优化,通过把一个高效连接整体发送给NDB集群的data节点,然后可以通过分布式和并行来完成。关于更多这种优化的信息,请看Conditions for NDB pushdown joins。

主要考虑的查询优化是:

>为了使得一个慢select ... where 查询变快,第一件事就是去检查是否可以加索引。在where条件的列上加索引,可以加快评估,过滤条件,并且最终尽快查出结果。为了避免浪费磁盘空间,通过在你的应用中构建小集合的索引来加快相关查询的速度。

对于查询使用了例如joins或者是外键等特性关联多张表的查询来说,索引是特别重要的。你能够使用EXPLAIN语句来决定在查询中使用了哪些索引。具体请看8.3.1的mysql如何使用索引和8.8.1的用EXPLAIN来优化查询。

>独立并且调整查询中任何花费时间较长的部分,比方说函数调用。依赖于查询如何构造和执行,一个函数可能只是对结果集中的每行数据调用一次,或者是对表中的每行数据都调用一次,这极大的放大了查询的无效性。

>尽量减少在你查询中的全表扫描,特别是大表。

>周期性的通过ANALYZE TABLE命令来更新和保持表中的统计信息,从而为优化器提供信息来构建一个有效的执行计划。

>学习调整技术,索引技术,并且对于不同存储引擎中的每一张表配置特别的参数。不管是innoDB还是myisam,都有指南帮助维持查询的持久高效性。更多信息请看8.5.6的优化innoDB查询和8.6.1部分的优化myIsam查询。

>你可以通过使用在8.5.3中的innoDB只读事物优化的技术,对innoDB表中的简单事物查询做优化。

>避免转变查询使其变得更难理解,特别是优化器自己自动完成的一些相同转变。

>如果一个性能问题不能通过基本指导里的思路来解决,那么通过阅读EXPLAIN的信息深入的研究一下查询的内在结构,并通过调整你的索引,where条件,join条件等来解决。(如果你确定想要的是专家级别,那阅读每个查询的EXPLAIN计划也许是你第一步应该做的)

>调整mysql使用缓存的大小和内存区域的属性。通过有效的使用innoDB的缓存池,myisam的key缓存,mysql的查询缓存,重复查询能够运行的更快,因为结果已经被缓存了。

>即使是通过使用缓存,一个查询已经很快速了,但是通过进一步优化,可以使得查询占用更小的缓存大小,从而使得你的应用更稳定,高效,可扩展。高扩展性,表示你的应用在低延迟下能够处理更多的并发客户,大量的请求等。

>处理锁问题,你查询的速度被其他sessions同时在操作表的事件而影响。

到此关于查询优化的大概介绍就结束了,接下来我们将对上述列出的目录一一说明。

下一文要说的是8.2.1.1的WHERE条件的优化

mysql5.7官网直译SQL语句优化--select语句优化的更多相关文章

  1. mysql5.7官网直译SQL语句优化--分组优化

    1.14Group By Optimization 分组优化 大多数方法为了满足分组查询需要扫描整个表并且创建一个临时表,其中每组中的值都是连续的,如果可以使用聚合函数和临时表获取各个分组.在某些情况 ...

  2. 优化Select 语句的原则

    优化Select 语句的原则 -摘抄<SQL Server 2005 性能监测与优化> Select 语句是数据库应用系统中最常用的语句之一,Select 语句设计的好坏直接影响到应用程序 ...

  3. [置顶] VB6基本数据库应用(三):连接数据库与SQL语句的Select语句初步

    同系列的第三篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9455721 连接数据库与SQL语句的Select语句初步 ”前文再续, ...

  4. DO语句与SELECT语句,HANDLER语句

    DO语句,只执行语句不返回结果:SELECT 既执行语句也返回结果. HANDLER的效率会更好. HANDLER 语句比SELECT 语句更快: 1,HANDLER只需OPEN一次,能重用,不须每次 ...

  5. MySQL-SQL语句中SELECT语句的执行顺序

    SELECT语句的执行顺序大家比较少关注,下面将为您详细介绍SQL语句中SELECT语句的执行顺序,供您参考,希望对您能够有所帮助. SELECT语句的执行的逻辑查询处理步骤: (8)SELECT ( ...

  6. CSS布局学习(三) - position属性定义及解释(官网直译)

    static ①元素的位置是在文档正常布局流中的位置. ②设置top right bottom left与z-index无效. ③在未指定position时,static是默认值 以下例子进行说明: ...

  7. SQL指南-SELECT语句

    SELECT 语句 SELECT 语句用于从表中筛选数据.列表结果存储于一个结果表中(称作result-set) 语法 SELECT column_name(s)FROM table_name 注意: ...

  8. SQL 基础:Select语句,各种join,union用法

    一.基本的SELECT语句 1. “*”的注意事项:在SELECT语句中,用*来选取所有的列,这是一个应该抵制的习惯. 虽然节省了输入列名的时间,但是也意味着获得的数据比真正需要的数据多的多.相应的, ...

  9. 容易被忽略的事----sql语句中select语句的执行顺序

    关于Sql中Select语句的执行顺序,一直很少注意这个问题,对于关键字的使用也很随意,至于效率问题,因为表中的数据量都不是很大,所以也不是很在意. 今天在一次面试的时候自己见到了,感觉没一点的印象, ...

随机推荐

  1. VS调试ASP.NET浏览器会不断的发出POLL请求

    Poll管道不断发送请求问题! Visual Studio 2013的一个问题Visual Studio 2013中在IE浏览器浏览localhost网站时候,发现会不断有下面链接的请求,这个是怎么回 ...

  2. CF899A Splitting in Teams

    CF899A Splitting in Teams 题意翻译 n个数,只有1,2,把它们任意分组,和为3的组最多多少 题目描述 There were nn groups of students whi ...

  3. 【jQuery】对于复选框操作的attr与prop

    这个是在jQuery1.6版本号之后出现的鬼东西.受影响的主要有下拉列表select与复选框checkbox.众所周知.在jQuery中能够用attr()取出节点的属性,然而对于checkbox却不是 ...

  4. 使用gridlayout布局后,因某些原因又删除,并整理文件夹结构时,Unable to resolve target &#39;android-7&#39;

    出现的问题 [2013-01-11 10:52:39 - gridlayout_v7] Unable to resolve target 'android-7' 事由:在一次做九宫格时.误使用了gri ...

  5. 字节与字符_字节流与字符流_ASCII与Unicode_GB2312_GBK_GB18030_BIG-5

    字节(Byte):通常将可表示经常使用英文字符8位二进制称为一字节. 一个英文字母(不分大写和小写)占一个字节的空间,一个中文汉字占两个字节的空间. 符号:英文标点2占一个字节,中文标点占两个字节. ...

  6. UI各种小控件的用法

    今天给大家列举出来UI中的一些小控件的用法.方便大的学习与使用 一些方法和属性我们能够查看API文档.不必将每一个控件的功能都记住, 由于在使用的过程中,我们能够查看API文档.方便使用,我们仅仅要记 ...

  7. 【iOS开发系列】UIDevice设备信息

    [1] 推断是否是横向屏: BOOL b=UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation); 获取设备uniqu ...

  8. ym—— Android网络框架Volley(终极篇)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持! 没看使用过Volley的同学能够,先看看Android网络框架Volley(体验篇)和 ...

  9. How to remove focus without setting focus to another control?

    How to remove focus without setting focus to another control? Ask Question up vote 67 down vote favo ...

  10. hdoj--1248--寒冰王座(完全背包)

    寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...