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. Android APP漏洞挖掘

    0x00 1.组件公开安全漏洞 參考Android 组件安全. 2.Content Provider文件文件夹遍历漏洞 參考Content Provider文件文件夹遍历漏洞浅析. 3.Android ...

  2. Hadoop高速入门

    Hadoop高速入门 先决条件 支持平台 GNU/Linux是产品开发和执行的平台. Hadoop已在有2000个节点的GNU/Linux主机组成的集群系统上得到验证. Win32平台是作为开发平台支 ...

  3. Unity3D中C#和JS的方法互相調用

    因为Unity3D中一些腳本的方法仅仅能用在JS中.在C#中是無效的,而C#能够與服務器端通訊,JS本身卻不行.所以勢必會遇到這兩種語言腳本中方法的互相調用,下面是演示样例. 兩個文件 test1.j ...

  4. DISCUZ站点DIY后,导致DIY功能失效,无法在前台删除已创建的DIY功能解决的方法

    DISCUZ站点DIY后.导致DIY功能失效,无法在前台删除已创建的DIY功能解决的方法.这是一个常常会遇到的问题.在程序调试过程中常常的会遇到这种问题.这里提供一个自己常常使用的解决的方法,供遇到这 ...

  5. 2015.05.11,外语,读书笔记-《Word Power Made Easy》 15 “如何谈论事情进展” SESSION 44

    1. not the real McCoy simulate(['simjuleit] v. 假装,冒充,模仿,模拟)来自拉丁simulo,copy的意思.simulo本身派生自拉丁形容词simili ...

  6. c6----函数的声明和实现

    // // main.c // 函数的声明和定义 // // Created by xiaomage on 15/6/7. // Copyright (c) 2015年 xiaomage. All r ...

  7. hdoj--1051--Wooden Sticks(LIS)

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  8. 蓝桥杯--算法提高 排列数 (简单dfs)

    算法提高 排列数   时间限制:1.0s   内存限制:256.0MB      问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入 ...

  9. BZOJ 2212线段树的合并

    借鉴(抄)了一下题解-- 线段树合并的裸题吧- //By SiriusRen #include <cstdio> #include <cstring> #include < ...

  10. linux下通用Makefile写法

    linux编译多个源文件的程序比较麻烦,这下就需要通用的Makefile了,编译的时候执行一下make命令就OK,下面介绍通用makfile的写法. 假设现在有以下源文件:file1.h file1. ...