楼主: pipihappy8888

【大话IT】专家坐堂:SQL优化从索引设计做起!

[复制链接]
论坛徽章:
244
2015年新春福章
日期:2015-05-28 10:58:322015年新春福章
日期:2015-03-19 09:32:472015年新春福章
日期:2015-03-06 11:58:182015年新春福章
日期:2015-05-21 11:46:522015年新春福章
日期:2015-05-22 13:32:002015年新春福章
日期:2015-06-25 14:26:362015年新春福章
日期:2015-07-01 17:15:212015年新春福章
日期:2015-07-01 17:15:212015年新春福章
日期:2015-07-01 17:12:082015年新春福章
日期:2015-05-18 13:50:34
11#
发表于 2015-6-12 14:34 | 只看该作者
支持!

使用道具 举报

回复
求职 : SAP实施
论坛徽章:
261
土豪章
日期:2018-07-10 16:19:05ITPUB18周年纪念章
日期:2018-09-17 10:09:49ITPUB18周年纪念章
日期:2018-09-17 10:12:57妮可·罗宾
日期:2018-10-28 13:07:10ITPUB18周年纪念章
日期:2018-11-13 15:31:24ITPUB18周年纪念章
日期:2018-11-13 15:40:4519周年集字徽章-庆
日期:2019-09-06 18:30:1219周年集字徽章-19
日期:2021-02-03 16:43:4820周年集字徽章-年	
日期:2023-07-21 18:25:26
12#
发表于 2015-6-12 15:36 | 只看该作者
支持  

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:07:27ITPUB社区OCM联盟徽章
日期:2013-03-21 15:35:43
13#
发表于 2015-6-12 16:27 | 只看该作者
这本书写得很好,英文版的我看过几遍了

使用道具 举报

回复
论坛徽章:
22
秀才
日期:2015-06-17 15:51:02知识
日期:2015-08-11 10:37:42秀才
日期:2015-08-13 09:04:39秀才
日期:2015-09-21 09:46:16秀才
日期:2015-11-12 17:43:40秀才
日期:2015-12-14 14:47:54秀才
日期:2015-12-14 14:56:09秀才
日期:2016-01-05 09:35:58秀才
日期:2016-01-13 12:14:26秀才
日期:2016-02-18 09:31:52
14#
发表于 2015-6-12 16:41 | 只看该作者

看试读前跃跃欲试觉得问题很简单,看完试读觉得自己太肤浅想回炉重造一下了,努力回复争取拿下书本啊~!
1. 索引个数对于SQL解析性能的影响
索引数量不是对SQL性能影响的关键原因,任何一个表、索引的设计和实现,必须要有其应对的业务和应用场景。直接的说,每个表在出现的时候,必须要考虑它的核心作用是什么:做相对静态的数据记录查询,如产品列表和参数?作为频繁的插入、删除和更新,如交易订单?
针对这个表所承载的不同内容,所执行的核心操作,来设定它所应该具备的索引,是聚合的?离散的?还是序列的?同时分析它可能的环境情况匹配相应的基础架构条件,如SSD?SAN?或者是分布式环境?以及在系统的应用层面采用针对性的实现,如缓存?队列?等等。
如果一个表存在大量的索引,而且是不同类型的索引,说明这个表已经负担了大量不同种类的业务操作,要把这些操作都糅合一起必然就会有影响!对于数据库管理系统来说,它当次运行所选取的索引和内容结果的组织方式并不一定是最适合应用的要求,如我查订单,DB按照性别的索引获取……当然这受很多条件影响,但一个结构需要承担多种不同任务的时候,它本身要实现的平衡就很困难,这个困难也是在多层面影响的。
所以如果一个表有多个索引,除了可能会导致SQL解析性能的下降,更关键会导致对表的核心业务运作方式的混乱。当然,也可能是业务对于这个数据的用途在不断发生变化。

2. 如何有效使用索引和表结构来处理SQL语句
索引必须要和表结构、数据内容类型和表最常用的查询语句结合起来!个人水平所限没能力说明,业界关于sql技巧的书倒非常多,不敢班门弄斧。大概理解是SQL语句尽可能使用到索引,不允许在索引列做计算;表结构和数据类型必须与索引种类相匹配,别在性别列用聚集索引……

3. 前瞻性索引设计的核心思想是什么
核心思想应该是在表设计、索引设计和实现的时候,对这些数据可能会有怎么样的业务、使用场景包括数据格式等进行预测和分析。技术必须为业务服务才能体现价值,要成为业务的推进器必须要尽可能符合业务的发展要求。
前瞻性的设计需要预测这一笔业务数据内容和格式会怎么样变化、数据量上如何增长、使用的核心方式会有什么改变(读变写?)

4. 说说您读完试读样章后的启发
        必须拿下这本书,然后回炉重造,:)

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:07:27ITPUB社区OCM联盟徽章
日期:2013-03-21 15:35:43
15#
发表于 2015-6-12 16:56 | 只看该作者
1. 索引个数对于SQL解析性能的影响
索引个数多主要降低了插入的性能,由于能够快速定位数据,大多数时候对删除、修改数据提升了性能。合适的索引,个数再多,都肯定可以提升查询性能。
一张表的索引个数可以比普通人以为的多,具体多少索引个数,需要根据实际情况分析。如果是日志表,可能一个索引都多;如果一张表经常需要多角度查询,7、8个索引也未必多。
2. 如何有效使用索引和表结构来处理SQL语句
   根据sql语句的频繁、重要度来建索引,sql语句用得频繁、重要的建索引——根据sql过滤条件,和返回字段建索引使用的字段,过滤性强的字段在索引中排前。
3. 前瞻性索引设计的核心思想是什么
   前瞻性设计就是在项目上线前,综合、权衡sql应用的使用情况,合理的合并和建立索引,让最少的索引,获得最大的性能提升。
   例如a SQL过滤用了类型字段、身份证,b sql过滤用了身份证,c sql过滤用了国家字段,但国家、类型字段过滤性低,建一个身份证字段索引就可。   

4. 说说您读完试读样章后的启发
    这本书很早就读过了,就说说这本书给我的启发:
    这本书深入的讲解了索引的原理,市面上讲索引讲得如此深入的,精确到用伪代码描述索引执行时间的,仅此一本。
    受这本书讲的索引原理影响,我在工作中用索引用得很灵活,有的日志表,我取消掉索引,满足需求;有的地方,已经有7个索引,开发人员不敢再加索引,我做测试后,发现
    提升了性能,照加不误。

使用道具 举报

回复
论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
16#
发表于 2015-6-12 21:35 | 只看该作者
好像这本是讲索引原理的书,我记得英文版我看了开头,后面没看.

我讲讲我自己遇到的例子:

第1个项目实际上是一个小系统,30多张表,总共才6个索引.我晕啊.好在系统不大,我帮他们建立索引.

第2个项目1000多张表,实际使用400多张表,竟然1半的表没有主键索引,痛苦啊,我优化的项目不是做如何优化,而是从表执行的sql语句中猜测建立主键索引.
后来我才了解到实施人员在导入数据时存在冲突,删除了许多主键.

第3个项目走向另外一个极端,我记得其中一张表竟然有17个索引,开发几乎想把每一个字段都建立了索引,我很清楚记得那一天我所做的动作就是删除删除....
删除将近100多个索引.

第4个项目除了主键以外几乎没有其它索引.又是一个痛苦的优化过程.

我想提的是几个问题:
1.索引谁来建立,开发吗?还是dba,国内许多项目在前期根本没有dba的介入.许多项目一出来就是垃圾.豆腐渣工程.
2.索引优化几乎是立杆见影的事情.就是<品悟性能>的作者说的那样,我仅仅会建索引.
3.国内的开发团队存在许多问题,我问过许多开发,基本上从来没人看过执行计划.
4.我曾经给他们讲课,当你们写出一条sql语句的时候,脑子里想一想oracle会如何执行.即使事前不想,事后也该想想吧.
5.我对国内的开发实在太失望....

使用道具 举报

回复
论坛徽章:
25
双子座
日期:2015-07-16 14:18:24蒙奇·D·路飞
日期:2016-12-31 10:56:17乌索普
日期:2016-11-17 17:21:49妮可·罗宾
日期:2016-06-26 22:18:42白羊座
日期:2016-05-12 14:53:36双子座
日期:2016-03-21 18:25:51水瓶座
日期:2016-03-09 15:54:47水瓶座
日期:2016-01-26 10:44:56双鱼座
日期:2015-08-20 10:30:26蒙奇·D·路飞
日期:2017-03-20 10:23:01
17#
发表于 2015-6-12 22:03 | 只看该作者
第3个项目走向另外一个极端,我记得其中一张表竟然有17个索引,开发几乎想把每一个字段都建立了索引,我很清楚记得那一天我所做的动作就是删除删除....
删除将近100多个索引.

我们系统中有2张大表也是热表没有17个索引,也有15个吧。那么多索引,先看着就不舒服。

使用道具 举报

回复
论坛徽章:
25
双子座
日期:2015-07-16 14:18:24蒙奇·D·路飞
日期:2016-12-31 10:56:17乌索普
日期:2016-11-17 17:21:49妮可·罗宾
日期:2016-06-26 22:18:42白羊座
日期:2016-05-12 14:53:36双子座
日期:2016-03-21 18:25:51水瓶座
日期:2016-03-09 15:54:47水瓶座
日期:2016-01-26 10:44:56双鱼座
日期:2015-08-20 10:30:26蒙奇·D·路飞
日期:2017-03-20 10:23:01
18#
发表于 2015-6-12 22:12 | 只看该作者
在删索引前,我会综合以下2条
1.按索引的使用次数。使用次数越小甚至为0,可以删。
2.按照user_indexes的DISTINCT_KEYS(越小越该删),AVG_LEAF_BLOCKS_PER_KEY(越大越该删),AVG_DATA_BLOCKS_PER_KEY(越大越该删)。

有时候很纠结,满足第二条的索引(键值重复高),但是不满足第一条(使用还很频繁),这样的索引,就不敢动手了。。。

使用道具 举报

回复
论坛徽章:
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
19#
发表于 2015-6-12 22:30 | 只看该作者
文库访问有问题,能否把附件贴在这里

使用道具 举报

回复
论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
20#
发表于 2015-6-12 22:35 | 只看该作者
删除索引最复杂,实际上有1些选择率低的很容易确定,但是其它实在不好确定.
表越大,删除索引一定要小心.

使用道具 举报

回复

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

本版积分规则 发表回复

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