8.2.1-优化SELECT语句

8.2.1.优化 SELECT 语句

由SELECT 语句组成的查询,在数据中执行所有的查询.对这类语句的调优排在首位,无论是调优动态web网页的二级响应时间,还是减少
生成巨大隔夜报告的时间.

而且,对SELECT语句调优的技术同样适用 CREATE TABLE...AS SELECT, INSERT INTO...SELECT,DELETE 中带有where的语句.
这些语句还有其他的性能开销,因为这些操作在读操作的时候也进行写操作.

MySQL Cluster 支持join pushdown优化,join 操作会被发送实际的MySQL Cluster 数据结点,这样可以分布join操作来达到并行操作.

更多关于此优化的信息,查看 Conditions for NDB pushdown joins.

加快 SELECT 语句

优化查询的主要方法有:

1.为了让慢的SELECT ... WHERE 查询变快,首要做的事是检查你是否能够加一个索引.在where 语句中使用到的列上加索引,能加快预估,过滤
    和最后取回结果的速度.为避免浪费磁盘空间,构建一个小的索引来加快你应用程序中大多数相关的查询.

索引对于引用其他的表的查询也很重要,比如使用类似 joins,foreign keys的查询.你可以使用EXPLAN 语句来查看SELECT语句使用了哪个索引.
      查看Section 8.3.1,"How MySQL Uses Indexes" 和 Section 8.8.1,"Optimizing Queries with EXPLAIN"

2.分离,调整查询的各个子部分,比如函数调用会花费许多的时间.一个函数会对结果集中每行都调用一次,或者对表中的所有行只调用一次---这能大幅度提升效率,
这取决于查询的组成.

3.让全表查询最小化,特别是对于大数据表.

4.周期执行ANALYZE TABLE 语句保持表统计信息最新,这样优化器才有足够的信息去生成高效的执行计划

5.学习调优技术,索引相关技术,和存储引擎的配置参数.InnoDB和MyISAM都有系列手册让查询高效执行.
更多信息,查看 Section 8.5.6,"Optimizing InnoDB Querire" 和 Section 8.6.1,"Optimizing MyISAM Queries".

6.通常,在MySQL5.6.4和更高版本中,你能够通过只读事务来优化InnoDB数据表的单个查询事务.Section 8.5.3,"Optimizing InnoDB Read-Only Transactions"

7.避免转换会让查询语句变成难以理解,特别是优化器会进行同样的转换时.

8.如果通过基础手册很难解决性能问题,阅读EXPLAN 执行计划的输出,深入内部详情,调整你的索引(where 语句,join语句).
如果你的技艺已经很高超,阅读执行计划或许是你的优化每个查询的第一步

9.调整MySQL用于缓存的内存大小.有效的使用InnoDB buffer pool,MySIAM key cache,和MySQL查询缓存,重复执行查询比较快,因为在第一次查询后,结果都从从内存中取回(MySQL自身的查询缓存).

10.即使一个查询使用缓存已经运行的够快,你或许会继续优化让它使用更少的空间来缓存,让你的程序更具有可扩展性。可扩展性意味你的程序可以同时容纳更多的用户,
更大的请求,但是不会有太大的性能落差。

11.处理锁问题,你的查询速度可能会被其他正在同一时间使用表的会话影响.

原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/9867955.html

时间: 2024-11-12 05:51:57

8.2.1-优化SELECT语句的相关文章

优化Select 语句的原则

优化Select 语句的原则 -摘抄<SQL Server 2005 性能监测与优化> Select 语句是数据库应用系统中最常用的语句之一,Select 语句设计的好坏直接影响到应用程序的工作性能. 在设计Select语句时,应该注意以下几种影响查询效率的情况: 1.  没有创建索引,或者没有正确地使用索引.这是最有可能影响数据库查询的原因之一.创建索引是优化数据库查询效率的重要手段. 2.  存在死锁的情况,从而导致Select语句挂起,无法返回结果集. 3.  返回不必要的列,很多程序员

MySQL: select 语句

1. order by (排序) 通常使用一个字段作为参考标准,进行排序. 语法:order by [字段] asc|desc;(升序.降序) tip : 校对规则 决定 排序关系. 允许多字段排序(先按第一个字段排序,当出现不能区分的时候,按第二个字段进行排序,依此类推). [举个栗子] 对于下表,输入select * from tb_name; 时,会按照输入顺序依次显示表中的数据: 当需要对表中数据按照字段 stu_score 进行降序排列时,在输入语句后加上order by stu_sc

优化数据库语句的几个简单技巧

1. 索引 a. SQL语句的 where 和 join 部分中用到的字段,都应该加上索引. b. 尽量用加索引的字段进行直接判断,不要对加索引的字段进行转化后再判断,因为这样会导致加的索引无效,达不到优化的效果. e.g. 查询A表中所有2016年的数据 CREATE INDEX A_idx ON A (date_column); SELECT text, date_column FROM A WHERE TO_CHAR(date_column, 'YYYY') = '2016'; 上述的索引

JDBC批处理Select语句

注:为了更好理解本文,请结合原文阅读 在上一篇文章中提到了PreparedStatement的局限性:PreparedStatement不允许一个占位符(?)设置多个值,本文试图从其它角度来解决该问题. 在网络上开销最昂贵的资源就是客户端与服务器往返的请求与响应,JDBC中类似的一种情况就是对数据库的调用,如果你在做数据插入.更新.删除操作,可以使用executeBatch()方法减少数据库调用次数,如: 1 2 3 4 5 Statement pstmt = conn.createStatem

Local prefixed index和Local nonprefixed index对select语句的性能影响分析

1.搞清楚两种索引的概念 在比较两种索引对select产生的影响之前,先要搞清楚,什么是Local prefixed index,什么叫Local nonprefixed index.其实,这两种索引,都是属于分区local索引,所以,这两种类型的索引,只有可能在分区表上才会出现. 1.1 什么是Local prefixed index 是指索引中的列,就是分区表的分区键列,或者是索引中的列,包含表的分区键值列,并且为前置位 置在索引最前部位置的本地分区索引. 例如,emp表是按时间范围分区的表

通过profile优化SQL语句

开启profile优化SQL语句:set profiling=1;执行SQL语句show profiles;show profile for query 2;//根据query_id 查看某个查询的详细时间耗费 SHOW STATUS LIKE 'last_query_cost';//查询上一条语句执行的代价 例: mysql> show profiles;+----------+------------+----------------------------------------+| Qu

SQL优化之语句优化

昨天Qi号与大家分享了SQL优化中的索引优化,今天给大家聊一下,在开发过程中高质量的代码也是会带来优化的 网上关于SQL优化的教程很多,但是比较杂乱.Qi整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. SQL语句优化,简单的说就是对SQL语句进行高效率的代码编写,其原理其实与SQL索引优化一致: 建立索引其实就是减少数据库在执行时所扫描的影响行数,尽可能的避免全局扫描 优化注意:对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及

Expert 诊断优化系列------------------语句调优

前面三篇通过CPU.内存.磁盘三巨头,讲述了如何透过现在看本质,怎样定位服务器三巨头反映出的问题.为了方便阅读给出链接: Expert 诊断优化系列------------------你的CPU高么? Expert 诊断优化系列------------------内存不够用么? Expert 诊断优化系列------------------冤枉磁盘了 通过三篇文章的基本介绍,可以看出系统的语句如果不优化,可能会导致三巨头都出现异常的表现.所以本篇开始介绍系统中的重头戏--------------

基本select语句的生命周期

(1) 客户端sqlserver网络接口通过一种网络协议(可以是共享内存:简单高速,客户端和sql server在同一台计算机默认连接方式:TCP/IP:访问sql server最常用的一种协议,客户端指定ip地址和端口号连接到sql server;命名管道:命名管道和TCP/IP协议在体系结构上是类似的,是为局域网设计的,在广域网中速度会慢一些:VIA:虚拟接口适配器,是一种可以让两个系统进行高性能通信的协议,要求通信两端使用特殊的硬件和专门连接)和服务的的SNI建立了一个连接,然后通过网络协