`
jiangduxi
  • 浏览: 444480 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

数据库之优化二

阅读更多
  前面也有一些优化的策略,现在在看看一些优化关于Group BY 语句、 Order By语句 等。

优化GROUP BY语句
   默认情况下,MySQL对所有GROUP BY col1,col2...的字段进行排序。这与在查询中指定ORDER BY col1,col2...类似。因此,如果显式包括一个包含相同的列的ORDER BY子句,则对MySQL的实际执行性能没有什么影响。 如果查询包括GROUP BY 但用户想要避免排序结果的消耗,则可以指定ORDER By NULL禁止排序,例如:
引用

  explain select id, sum(moneys) from sales2 group by id \G
  
  explain select id, sum(moneys) from sales2 group by id order by null \G

你可以通过比较发现第一条语句会比第二句在Extra:里面多了Using filesort.而恰恰filesort是最耗时的。


优化ORDER BY语句
    在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序。WHERE 条件和 ORDER BY使用相同的索引,并且ORDER BY的顺序和索引顺序相同,并且ORDER BY的字段都是升序或者都是降序。
例如:
引用

SELECT * FROM t1 ORDER BY key_part1,key_part2,....:
SELECT * FROM t1 WHERE key_part1 = 1 ORDER BY key_part1 DESC,key_part2 DESC;
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC;

但是以下的情况不使用索引:
引用

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
--ORDER by的字段混合ASC 和 DESC

SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
----用于查询行的关键字与ORDER BY 中所使用的不相同

SELECT * FROM t1 ORDER BY key1, key2;
----对不同的关键字使用ORDER BY


优化嵌套查询
   MySQL4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个查询结果作为过滤条件用在另一个查询中,使用子查询可以一次性地完成多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且些起来也很容易。但是,有些情况下,子查询可以被更有效的连接(JOIN)替代。
例如:
引用

  explain select * from sales2 where company_id not in(select id from company2) \G

explain select * from sales2 left join comany2 on sales2.company_id = company2.id  where sales2.company_id is null \G;

第一句看起来比第二句更简洁,但是第二句比第一就更快。因为使用JOIN来完成这个查询,速度比较快,尤其如果对compay2表中的id建立了索引的话,那么性能将会更好。那为什么在这种情况下使用JOIN会更有效率呢。因为MySQL不需要在内存中创建临时表来完成这个逻辑上需要两个步骤的查询工作。

优化OR条件
  对于含有OR的查询子句,如果要利用索引,则OR之间的每个条件列都必须用到索引;如果没有索引,则考虑增加索引。

使用SQL提示
  SQL 提示(SQL HINT)是优化数据库的一个重要手段,简单来说就是在SQL语句中加入一些人为的提示来达到优化的操作的目的。
例如:
引用

   SELECT SQL_BUFFER_RESULTS * FROM ...

这个语句将强制MySQL生成一个临时结果集。只要临时结果集生成后,所有表上的锁定均被释放。这能在遇到表锁定问题时或者要花很长时间将结果传给客户端时所帮助,因为可以尽快释放锁资源,
  下面是一些在MySQL中常用的SQL提示。
引用

  1. USE INDEX
   在查询语句中表名的后面,添加USE INDEX 来提供希望MySQL去参考的索引列表,就可以让MySQL不再考虑其他可用的索引。
    
引用

       explain select * from sales2 use index (ind_sales2_id) where id  3 \G;
   


2. IGNORE INDEX
     如果用户只是单纯地想让MySQL忽略一个或者多个索引,则可以使用IGNORE INDEX 作为HINT

3. FORCE INDEX
  为强制MySQL使用一个特定的索引,可在查询中使用FORCE INDEX作为HINT。例如当不强制使用索引的时候,因为id的值都是大于0的,因为MySQL会默认进行全表扫描,而不使用索引。例如:
引用

  expalin select * from sales2 where id > 0 \G;

但是,当使用FORCE INDEX进行提示时,即便使用索引的效率不是很高,MySQL还是选择使用了索引,这是MySQL留给用户的一个自行选择执行计划的权利。加入FORCE INDEX提示后在执行上面的SQL
引用

    explain select * from sales2 force index(index_sales2_id) where id > 0 \G;




  SQL优化问题是数据库性能优化最基础也是最重要的一个问题,实践表明很多数据库性能问题都是由于不合适的SQL语句造成。一些列的SQL优化描述。怎么定位问题,怎么在编写的时候优化,怎么来应对。不过优化SQL语句经常需要考虑的几个方面,比如索引,表分析,排序等等。
分享到:
评论

相关推荐

    oracle数据库的优化

    数据库的优化 2 概述 2 监控数据库的性能: 2 优化数据库磁盘I/O 2 建立和优化数据库文件的方针: 6 监控磁盘I/O的方法: 7 优化回滚段 7 检测回滚段争用: 7 通过以下公式计算等待比率: 8 若任何一个的比率大于1%...

    db2数据库性能优化小技巧

    db2数据库性能优化小技巧

    oracle数据库性能优化.pdf

    oracle数据库性能优化.pdforacle数据库性能优化.pdforacle数据库性能优化.pdforacle数据库性能优化.pdforacle数据库性能优化.pdf

    DB2数据库性能调整和优化 牛新庄 PDF

    DB2数据库性能调整和优化(第2版)侧重于介绍DB2数据库的性能调优。性能调优是一个系统工程:全面监控分析操作系统、I/O性能、内存、应用及数据库才能快速找到问题根源;深刻理解DB2的锁及并发机制、索引原理、数据库...

    MySQL数据库查询优化

    第2课 数据库查询优化技术总揽 综述查询优化技术范围,包括查询重用、查询重写规则、查询算法优化、并行查询优化等 综述逻辑查询优化,包括子查询的优化、视图重写、等价谓词重写、条件化简、连接消除、非SPJ的优化...

    北邮数据库实验8 数据查询分析优化实验

    熟悉了解SQL SERVER数据库中查询优化的使用,理解数据库查询优化的基本概念。 2. 掌握利用SQL Server Management Studio提供的机制,分析对比形式不同、执行结果等价的不同SQL语句的查询执行计划的执行成本和执行...

    oracle 数据库优化技术资料

    如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关. 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器. 在缺省情况下,...

    S2-2-MySchool数据库设计优化(PPT+源码)【第二章】

    S2-2-MySchool数据库设计优化(PPT+源码)【第二章】

    数据库设计与优化.pdf

    所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关 的注意事项。 1.2 分析阶段 一 般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性、可用性、可靠性、安全性需求往往吸引 了我们大...

    MySQL数据库设计、优化.pptx

    提纲 规范 基础规范 命名规范 库表规范 字段规范 索引规范 开发环境 优化 MySQL数据库设计、优化全文共24页,当前为第2页。 规范 基础规范 全部使用InnoDB引擎,MyISAM适用场景非常少 字符集:latin1 => utf8 => ...

    db2优化器-DB2数据库性能调整和优化

    DB2数据库性能调整和优化 - db2优化器

    MySQL数据库优化

    MySQL数据库优化(二) 5 MySQL数据库优化(三) 13 MySQL数据库优化(五):锁 25 MySQL数据库优化(六):优化数据库结构 29 MySQL数据库优化(七):MySQL如何使用索引 31 MySQL数据库优化(九) 34 MySQL数据库...

    MySQL数据库结构优化最佳实践

    详细介绍数据库结构设计、范式和反范式设计、物理设计等等 目录: 一、结构优化概述 二、结构设计 三、需求分析及逻辑设计 四、需求分析及逻辑设计—反范式化设计 五、范式化设计和反范式化设计优缺点 六、物理设计...

    使用JAVA内存数据库h2database性能优化

    我们在开发应用都知道IO是系统性能的瓶颈,在...2.对数据实时计算,而且数据量很大时,比如电信系统的电信的二次批价和实时累账 3. 需实时统计数据,监控海量数据问题,比如ATM监控系统的可疑交易监控(广东中行)

    IBM DB2数据库性能优化视频.rar

    │ │ 第2周 DB2性能优化方法系统.pdf │ │ 第二周 DB2性能优化方法系统.mp4 ├ 第03周 从监控开始 │ │ 第3周 从监控开始.pdf │ └ 第三周 从监控开始.mp4 ├ 第04周 配置参数调整 │ │ 第4周 配置参数调整.pdf...

    java数据库之sql优化

    (1)硬件问题:网络慢,IO慢,内存不足,吞吐量小,磁盘空间满 (2)Sql写法问题 (3)数据过多,分库分表 (4)索引失效 (5)服务器调优及各个参数设置

    数据库索引设计与优化.part2

    数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与优化.part2数据库索引设计与...

    2G内存的MYSQL数据库服务器优化

    2G内存的MYSQL 数据库服务器优化.

    db2数据库性能优化

    这是关于db2数据库性能优化的文档,总结的相对不错!

    ORACLE数据库优化基础培训.zip

    ORACLE数据库优化基础培训,涵盖了基础操作和常见的问题。 数据库培训内容: 1、Oracle之SQL语句性能优化 2、数据库常用管理命令 3、数据库常见问题处理

Global site tag (gtag.js) - Google Analytics