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. BA-siemens-apogee自适应控制

    简介 APOGEE楼控系统的控制器中,包括了由 Cybosoft开发的基于无模型自适应控制技术的自适应控制. 自适应控制是一个复杂的闭环循环控制算 法.自适应控制能自动校正参数以补偿机械的系 统/负载 ...

  2. HDU 4340

    好题一道啦.做这题时,抓住两个问题:一.给某点染色时,其连通的点是否已有一点以全部代价染色.二.该点染什么颜色. 嗯.第二个问题很容易,但第一个问题不容易了.我一开始就考虑祖父子三层结点的关系,认为在 ...

  3. PPAPI插件与浏览器的通信

    PPAPI的插件,原本是能够使用JS与浏览器交互的,https://code.google.com/p/ppapi/wiki/InterfacingWithJavaScript.这里还提供了一个JS与 ...

  4. 最全Pycharm教程(38)——Pycharm版本号控制之远程共享

    1.主题 介绍怎样通过GitHub共享你的本地Git版本号库 2.准备工作 (1)Pycharm版本号为2.7或者更高 (2)Git以及GitHub可用 (3)有GitHub storage的读写权限 ...

  5. 初识cocos2dx——入门第一篇

    享受"啪"的按下Enter的快感. (by云风) cocos2dx是不是个toy引擎,不同的人有不同的看法.可是你不得不承认它非常受欢迎.好多非常火的手游使用的就是cocos2dx ...

  6. caffe训练CIFAR数据库

    CIFAR-10是一个用于普适物体识别的数据集.Cifar-10由60000张32*32的RGB彩色图片构成,50000张训练图片,10000张测试图片,分为10类.cifar下载地址: http:/ ...

  7. 【IOI 2011】Race

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2599 [算法] 点分治 [代码] #include<bits/stdc++.h ...

  8. Java-MyBatis:MyBatis XML 文件

    ylbtech-Java-MyBatis:MyBatis XML 文件 1.返回顶部 1. Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大, ...

  9. 关于jquery文件上传插件 uploadify 3.1的使用

    要使用uplaodify3.1,自然要下载相应的包,下载地址http://www.uploadify.com/download/,这里有两种包,一个是基于flash,免费的,一个是基于html5,需要 ...

  10. HD-ACM算法专攻系列(21)——Wooden Sticks

    题目描述: AC源码: 此题考查贪心算法,解题思路:首先使用快速排序,以w或l按升序排序(注意相等时,应按另一值升序排序),这样就将二维变量比较,变为了一维的,排好序的一边就不需要去管了,只需要对未排 ...