查看: 24362|回复: 62

话题讨论:数据库查询优化的策略有哪些?

[复制链接]
论坛徽章:
49
现任管理团队成员
日期:2012-10-18 17:10:46妮可·罗宾
日期:2018-04-03 13:57:49
跳转到指定楼层
1#
发表于 2014-2-24 13:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
话题讨论:数据库查询优化的策略有哪些?

    数据库查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的select语句在SQL语句中又是代价最大的语句。举例来说,如果数据的量积累到一定程度,比如一个银行的账户数据库表信息积累到上百万甚至上千条记录,全表扫描一次往往需要数十分钟,甚至数小时。如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见查询优化技术的重要性。本期我们将围绕以下几个话题讨论:
      1、数据库查询优化的策略有哪些?
      2、随着数据库越来越自动化,数据库的优化工作是否也可以自动完成?
      3、数据库优化和SQL审计谁将是未来数据库技术服务的主流?
      4、阅读本书试读章节,发布您的看法。

      活动时间:2014年2月24日-3月10日。

      活动奖励:我们会在讨论结束后,我们随机抽取5名网友赠送《数据库查询优化器的艺术:原理解析与SQL性能优化》这本书作为奖励。

图书基本信息:

      书名:数据库查询优化器的艺术:原理解析与SQL性能优化
      作者:李海翔
      定价:89.00元
      出版社:机械工业出版社      图书试读地址:http://wenku.it168.com/d_001355249.shtml
本书推荐:
      数据库查询优化领域的里程碑之作!
      由Oracle公司MySQL全球开发团队、资深专家撰写。
      数据库领域泰斗王珊教授亲自作序推荐!
      PostgreSQL中国社区和中国用户会发起人以及来自Oracle、新浪、网易、华为等企业的数位资深数据库专家联袂推荐。
作者简介:
      李海翔 网名“那海蓝蓝”,资深数据库专家,从事数据库研发、数据库测试与技术管理等工作10余年,对数据库的内核有深入的研究,长于PostgreSQL和MySQL等开源数据库的内核与架构。现任职于Oracle公司MySQL全球开发团队,从事查询优化技术的研究和MySQL查询优化器的开发工作。曾参与了863、核高基、工信部、科技部、发改委、北京市科委等多个重大科技项目。
2009532140
pastime_Wang
LH515BEST
chszs
szxiaocong




求职 : 数据库管理员
招聘 : Java研发
论坛徽章:
6402
娜美
日期:2021-10-12 20:11:36技术图书徽章
日期:2021-09-30 12:11:1120周年集字徽章-年	
日期:2021-09-30 12:12:5820周年集字徽章-20	
日期:2021-09-30 12:43:0619周年集字徽章-周
日期:2021-09-30 13:18:3120周年集字徽章-20	
日期:2021-09-30 16:44:1219周年集字徽章-周
日期:2021-09-30 17:01:04技术图书徽章
日期:2021-09-30 17:59:14技术图书徽章
日期:2021-10-06 10:36:4019周年集字徽章-19
日期:2021-10-06 14:43:24
2#
发表于 2014-2-24 13:38 | 只看该作者
本帖最后由 2009532140 于 2014-2-24 16:40 编辑

晕!又是一本好书!

1、数据库查询优化的策略有哪些?
==========================================
①:首先要想到的是索引,索引对于查询有着至关重要的影响。但是索引是把双刃剑,要根据索引的特性,好好利用他的优点。
②:高效的SQL语句。这里就不重复说明什么样的语句会导致性能问题,谷歌能找出一堆,不过随着优化器的智能化,有的已经不适用于新版本的数据库。
③:适当利用临时表来存储中间结果。或者使用特定数据库的特定语法来优化查询。
==========================================
2、随着数据库越来越自动化,数据库的优化工作是否也可以自动完成?
==========================================
这个至少在可预见的未来是不可能实现自动完成的。
执行出正确的执行计划需要很多信息,就拿一个新上线的系统来说,根本不可能知道工作负载,或者相关统计信息,这样很可能导致执行了错误的执行计划
再者,随着子查询的层数增多,可能的执行计划也是成指数增长,如果挨个审查最优的执行计划相反不能起到期望结果。如果不是挨个审查计划,这就又未必能审核实际正确的计划
==>所以:想要自动完成数据库的优化工作还是困难重重...
==========================================
3、数据库优化和SQL审计谁将是未来数据库技术服务的主流?
==========================================
要说哪个更可能,或者说必须选一个的话,我认为还是第一个..
因为数据库优化更加灵活,更需要靠DBA 的工作经验。
再者,一般企业的数据库都多少有不合理的SQL。
可以说:数据库优化无止境,没有最好只有更好....
==========================================
4、阅读本书试读章节,发布您的看法。
==========================================
看了前面的一部分,暂时没有什么看法..
作者将本书分为四大部分。从首先描述普遍性的优化技术.
接着就是各个说明postGREsql 与 Mysql ,最后就是他两的对比.
其中最吸引人之一的是第二章的:
2.1.2之后至章尾的部分,作者从数理方面使用规则来指导如何人工优化SQL。这种方式适用于所有类型的RDBMS。
其中最吸引人之二的是第三章的:
3.4.2至结尾部分。主要原因是涉及到一定的算法。可以让读者进一步认识表之间连接。

==========================================
更多期待的是以后章节带来的精彩






使用道具 举报

回复
论坛徽章:
68
林肯
日期:2013-09-12 15:57:33马自达
日期:2013-10-11 13:52:31路虎
日期:2014-01-26 14:35:49现代
日期:2013-08-29 14:39:50三菱
日期:2013-11-25 11:21:19雪佛兰
日期:2013-09-12 15:55:00一汽
日期:2013-11-28 14:15:05技术图书徽章
日期:2013-12-11 10:11:35技术图书徽章
日期:2013-12-11 10:10:51技术图书徽章
日期:2014-01-14 10:54:13
3#
发表于 2014-2-24 14:04 | 只看该作者
本帖最后由 pastime_Wang 于 2014-3-13 11:41 编辑

原来是奖 postgreSQL 和 mysql, 他们的优化器也是基于CBO?
简单谈谈个人的看法:

1、数据库查询优化的策略有哪些?

总的优化策略: 最短的时间内访问最少的数据, 主要包括:

1.1、创建和应用有效的索引
1.2、应用CBO
1.3、分区
1.4、书写高效SQL

2、随着数据库越来越自动化,数据库的优化工作是否也可以自动完成 ?

这是未来RDBMS发展方向,如CBO 逐渐取代 RBO 等,但目前仍要还需要人工干预,
使优化器能够选择正确地查询计划

如:

1、表统计信息获取不到或不准
2、非高效的SQL书写
3、参数设置不当等

3、数据库优化和SQL审计谁将是未来数据库技术服务的主流 ?

数据库优化 和 SQL审计 都是基于一定的"外部"条件,并且获取正确信息的条件下才"有可能" 获得正确的判断和解析
但目前人为、环境等因素制约其自动化的发展,更多的需要"人工干预", 还没有达到完全"人工智能"的程度

但是如果能够更快、更好的来由数据库自己来处理大部分的优化工作,对于DBA和开发人员来讲会提高工作效率和工作质量

SQL审计和数据库优化都是未来数据库智能发展的主要方向!

使用道具 举报

回复
论坛徽章:
7
2013年新春福章
日期:2013-02-25 14:51:24灰彻蛋
日期:2013-06-19 15:06:24技术图书徽章
日期:2014-01-26 14:23:572014年新春福章
日期:2014-02-18 16:48:49马上加薪
日期:2014-02-18 16:48:49天蝎座
日期:2015-07-08 22:36:16水瓶座
日期:2016-01-20 11:23:23
4#
发表于 2014-2-24 14:16 | 只看该作者

使用道具 举报

回复
论坛徽章:
764
生肖徽章:鸡
日期:2014-08-13 14:39:24奥运会纪念徽章:跳水
日期:2012-07-16 09:48:41奥运会纪念徽章:自行车
日期:2013-06-17 12:13:43奥运会纪念徽章:沙滩排球
日期:2013-06-17 12:11:20复活蛋
日期:2013-03-29 10:50:57比亚迪
日期:2013-09-29 13:21:57Jeep
日期:2013-09-29 13:54:002014年世界杯参赛球队: 加纳
日期:2014-05-20 17:24:592014年世界杯参赛球队:墨西哥
日期:2014-05-20 17:25:142014年世界杯参赛球队: 波黑
日期:2014-05-20 17:27:29
5#
发表于 2014-2-24 14:24 | 只看该作者
支持

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
6#
发表于 2014-2-24 14:28 | 只看该作者
     1、数据库查询优化的策略有哪些?
--优化需求、优化架构、优化查询写法、优化访问(索引等)、优化配置(内存、磁盘)
      2、随着数据库越来越自动化,数据库的优化工作是否也可以自动完成?
--一部分可以,比如in和exists的转化
      3、数据库优化和SQL审计谁将是未来数据库技术服务的主流?
--觉得都不是,还是解决故障是主流、因为前者只要开发队伍用心是可以自己解决的
      4、阅读本书试读章节,发布您的看法。
--不能访问,请贴附件

使用道具 举报

回复
论坛徽章:
2
2014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09
7#
发表于 2014-2-24 14:48 | 只看该作者
占楼看看先~~

使用道具 举报

回复
论坛徽章:
135
玉石琵琶
日期:2014-07-02 10:11:04九尾狐狸
日期:2014-07-02 10:11:04紫蜘蛛
日期:2014-07-02 10:11:04蓝色妖姬
日期:2014-07-02 10:11:04蓝色妖姬
日期:2014-08-28 15:17:25马上加薪
日期:2014-08-07 12:47:01马上加薪
日期:2014-07-23 11:55:37马上加薪
日期:2014-07-21 16:24:17马上加薪
日期:2014-07-17 17:01:52马上加薪
日期:2014-07-17 16:15:19
8#
发表于 2014-2-24 14:51 | 只看该作者
占楼看看先~~

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
41
喜羊羊
日期:2015-05-08 16:18:362014年新春福章
日期:2014-02-18 16:48:49技术图书徽章
日期:2014-01-26 14:02:05福特
日期:2013-12-27 00:16:54劳斯莱斯
日期:2013-12-20 16:46:55劳斯莱斯
日期:2013-12-02 16:08:54问答徽章
日期:2013-11-12 20:51:23奔驰
日期:2013-10-25 20:19:39ITPUB社区12周年站庆徽章
日期:2013-10-08 15:00:34马上加薪
日期:2014-02-18 16:48:49
9#
发表于 2014-2-24 15:12 | 只看该作者
支持,神书

使用道具 举报

回复
论坛徽章:
9
2014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31itpub13周年纪念徽章
日期:2014-10-08 15:13:38马上有车
日期:2014-10-09 16:50:00暖羊羊
日期:2015-03-04 14:54:572015年新春福章
日期:2015-03-06 11:59:47秀才
日期:2016-02-18 09:24:18秀才
日期:2016-02-18 09:24:30秀才
日期:2016-02-18 09:31:52
10#
发表于 2014-2-24 15:15 | 只看该作者
本帖最后由 LH515BEST 于 2014-3-11 10:39 编辑

1、数据库查询优化的策略有哪些?
   
    查询优化策略:
          我认为数据库的设计是根本,要想在应用中有高的效率,就要有好的设计。其次:
    (1)查询时应尽量避免全表查询,对于数据量比较大的表,可以在经常查询的字段建立索引避免全表扫描,也可以通过临时表提高查询效率;
    (2)在查询的过程中可以通过使用索引减少排序和分组,当然,并不是所有的索引都可以提高效率。常用的索引的建法:在数据量很大的情况下,要查出很小一部分数据时建索引,在最常用的能唯一标识的字段建索引,在where条件子句中的字段建索引;
    (3)在查询时通过条件限制减少查询的数据量可以调高查询效率;
    (4)减少distinct的使用,查询的表中字段较多时,减少*的使用;
    (5)在查询时,数据类型要匹配,如查询number类型的数据时,数据外不要加单引号,减少数据类型转换的次数;
    (6)在业务逻辑较复杂时,可以考虑使用存储过程或函数代替很长的sql。

2、随着数据库越来越自动化,数据库的优化工作是否也可以自动完成?

    数据库越来越自动化,我觉得数据库的优化工作在未来能自动完成。

3、数据库优化和SQL审计谁将是未来数据库技术服务的主流?
   
    我认为数据库的优化将是数据库技术服务的主流,若能实现数据库的自动优化,数据库或许就可以自动将sql调到最优或给出用户建议,使用户将sql调到最优。

4、阅读本书试读章节,发布您的看法。
   
    读完试读章节,觉得这本书从整体到细节的讲述了查询优化的方法:物理查询优化与逻辑查询优化。
    思路很清晰,有概念、有例子,对于postgreSQL优化器我还不了解,期待看到下面的章节。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表