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. CodeForcesGym 100676H Capital City

    H. Capital City Time Limit: 3000ms Memory Limit: 262144KB This problem will be judged on CodeForcesG ...

  2. HDU 5172

    超内存了,呃...不知道如何优化了. 首先要判断区间的和是否和1~n的和相等. 再个,记录下每个数字前一次出现的位置,求这些位置的最大值,如果小于左端点,则表示有这样的一个序列. 呃~~~第二个条件当 ...

  3. HDOJ 5099 Comparison of Android versions 坑题

    现场赛的时候错了十四次. . ... Comparison of Android versions Time Limit: 2000/1000 MS (Java/Others)    Memory L ...

  4. Eclipse开发C/C++程序的MinGw配置

    环境变量设置: a.鼠标右击桌面"计算机"(WindowsXp是"我的电脑")->"属性" b.WindowsXP时,在新弹出的属性窗 ...

  5. iOS动画之美丽的时钟

    1.终于效果图 2.实现思路 在ios中默认是绕着中心点旋转的,由于锚点默认在图层的中点,要想绕着下边中心点转,须要改变图层锚点的位置. 依据锚点.设置position坐标.为时钟的中点. 思考秒针旋 ...

  6. java 微信server录音下载到自己server

    /** * @author why * */ public class VoiceDownload { /** * * 依据文件id下载文件 * * * * @param mediaId * * 媒体 ...

  7. hdu 5410 CRB and His Birthday 01背包和全然背包

    #include<stdio.h> #include<string.h> #include<vector> #include<queue> #inclu ...

  8. PECL轻松安装PHP扩展

    搭建PHP环境的时候,我们通常不会把全部的扩展都安装,随着需求不断添加,可能须要安装新的扩展,以下介绍一种简便的安装方法. 此处以ev.so扩展为例. 1.进入php安装文件夹bin文件夹.cd /A ...

  9. Redis命令-HyperLogLog

    HyperLogLog数据结构简单介绍 能够看http://www.cnblogs.com/ysuzhaixuefei/p/4052110.html  博客,介绍的相对照较清晰. HyperLogLo ...

  10. android:layout_gravity 和android:gravit的区别?

    Android:layout_gravity 和android:gravit的区别? android:gravity是调整元素本身的内容或元素包含的子元素显示的位置,默认是显示在左侧 android: ...