楼主: pipihappy8888

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

[复制链接]
论坛徽章:
10
秀才
日期:2015-07-14 09:44:30秀才
日期:2015-08-17 13:13:142015年中国系统架构师大会纪念徽章
日期:2015-08-03 13:54:362014系统架构师大会纪念章
日期:2015-08-03 13:54:362013系统架构师大会纪念章
日期:2015-08-03 13:54:362012系统架构师大会纪念章
日期:2015-08-03 13:54:362011系统架构师大会纪念章
日期:2015-08-03 13:54:362010系统架构师大会纪念
日期:2015-08-03 13:54:362009架构师大会纪念徽章
日期:2015-08-03 13:54:36秀才
日期:2015-09-11 10:43:06
41#
发表于 2015-6-19 12:58 | 只看该作者
fatelyliang 发表于 2015-6-19 09:22
我有点不同意见,数据库设计人员也需要考虑到这个结构和数据内容需要怎么样考虑。个人觉得,如果数据库设 ...

我想,数据库的设计人员,关注更多的,可能是如何将业务数据进行合理的逻辑划分,以及数据库结构的稳定,易于扩展,因此,我们现在的数据库设计,大多还是采用的3NF理论进行指导。

如果一个数据库设计人员,过多的关注数据库开发方面的SQL语句编写 、SQL请求的运行效率 等这方面的事情,那么,模型的稳定 以及 可扩展性,可能就会有所拆扣了。

另外,就样章中,这段话本身也是针对于SQL语句的运行来讲的。而不是针对表的设计来讲的。在表的设计过程中,我想还是不需要考虑数据排序这个事情的吧。

------------------------
以上仅个人观点。

使用道具 举报

回复
论坛徽章:
59
优秀写手
日期:2015-02-12 06:00:132016猴年福章
日期:2016-02-23 09:58:34猴赛雷
日期:2016-02-23 10:04:24紫水晶
日期:2016-04-01 12:19:28双子座
日期:2016-04-28 10:19:29秀才
日期:2016-06-23 14:15:06奥运会纪念徽章:曲棍球
日期:2016-08-30 13:12:24奥运会纪念徽章:体操
日期:2016-09-26 11:24:37妮可·罗宾
日期:2016-10-25 13:54:46娜美
日期:2017-04-28 10:45:33
42#
发表于 2015-6-19 16:18 | 只看该作者
索引的学问确实很深,先不说索引的那么多类型,就连索引建立,优化器的选择,索引的维护都有那么多的学问,要学的真的还有很多。。。。

使用道具 举报

回复
论坛徽章:
11
优秀写手
日期:2014-12-31 06:00:15秀才
日期:2015-08-17 13:13:32秀才
日期:2015-08-06 13:55:21秀才
日期:2015-08-06 10:47:082014数据库大会纪念章
日期:2015-03-18 10:16:212013数据库大会纪念章
日期:2015-03-18 10:16:212012数据库大会纪念章
日期:2015-03-18 10:16:212011数据库大会纪念章
日期:2015-03-18 10:16:212010数据库技术大会纪念徽章
日期:2015-03-18 10:16:21知识
日期:2015-03-10 11:53:27
43#
发表于 2015-6-19 17:15 | 只看该作者
以后数据库,索引都自动维护了吧

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
44#
发表于 2015-6-22 16:25 | 只看该作者
呵呵,做好系统架构设计,才是软件优化的根本,索引设计是中间一层,最底一层才是SQL

使用道具 举报

回复
论坛徽章:
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
45#
发表于 2015-6-22 23:19 | 只看该作者
索引除了主键带的,都是物理模型的一部分

使用道具 举报

回复
论坛徽章:
41
生肖徽章:鼠
日期:2013-12-06 14:15:45生肖徽章:牛
日期:2013-12-06 14:15:45生肖徽章:虎
日期:2013-12-06 14:15:45生肖徽章:兔
日期:2013-12-06 14:15:45生肖徽章:龙
日期:2013-12-06 14:15:45生肖徽章:蛇
日期:2013-12-06 14:15:45生肖徽章:马
日期:2013-12-06 14:15:45生肖徽章:羊
日期:2013-12-06 14:15:45生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45
46#
发表于 2015-6-23 09:26 | 只看该作者
是本好书, 支持一下。

使用道具 举报

回复
论坛徽章:
1
ITPUB15周年纪念
日期:2019-01-25 11:35:05
47#
发表于 2015-6-23 14:20 | 只看该作者
1. 索引个数对于SQL解析性能的影响
由于经验少,所以在我工作中还没发现这个对sql解析性能影响非常大的案例。但是经常在oracle中做10053trace的时候就知道他会计算多个可能路径的cost值。所以觉得索引个数应该会对sql解析性能有一定影响。

2. 如何有效使用索引和表结构来处理SQL语句
前者如何有效的使用索引,我想是应该注意sql书写方式,分清楚函数索引,普通索引。以oracle数据库为例,如果是普通索引的列在where子句中使用了函数那么就会导致该索引不被使用。后者表结构对sql的处理上,我想的是非空约束,主键,外键等对sql的影响,比如非空约束,在not in中要使用hash join anti那么要求比较的列值不为空;主键的效果就不用说;外键上的索引对delete,update父表时的影响也很大。

3. 前瞻性索引设计的核心思想是什么
我觉得应该是建立在对业务的深入理解,了解所有的对表中数据的所有应用场景,最终了解列值统计信息,并统计出有哪些应用sql语句,不管是dml还是select类型的,然后根据表数据量,列的柱状图信息,语句的谓词,和排序字段等设计索引。尽可能做到我需要什么数据,语句就是访问那些些数据的,不需要做其他额外的操作(比如access与filter,我们通常喜欢直接access的内容就是我们所需的内容,而不需要access后还来一次filter)。

4. 说说您读完试读样章后的启发
样章中的内容在实际工作中也经常遇到,所以暂时没有惊艳的感受。不过读后启发还有一句话就是,I want you!!!嘿嘿

使用道具 举报

回复
论坛徽章:
1
ITPUB15周年纪念
日期:2019-01-25 11:35:05
48#
发表于 2015-6-23 14:26 | 只看该作者
hai503 发表于 2015-6-17 16:43
既然两位作者来了,有个疑问:
图中的这句话,意思不是太理解,能说明一下吗?

装B一下哈,勿怪!!我觉得应该有漏字,应该是即使只需要提取1条记录,也必须物化整个结果集合。意思是如果排序字段上没有有效索引,即使有但是执行时没用上,那么数据库就不知道哪一个数据是我们需要的数据,就必须把所有结果集都弄出来然后排序后取得我们所需的数据。如果走了排序字段的索引就不存在了,索引本身就是有序的,所以数据库已经大概知道了我们所需数据的物理位置了,直接可以获取到,不需要读出整个结果集数据来排序了。

使用道具 举报

回复
论坛徽章:
176
20周年集字徽章-20	
日期:2020-10-28 14:31:21ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB社区12周年站庆徽章
日期:2013-08-13 16:52:38itpub13周年纪念徽章
日期:2014-10-08 15:21:35ITPUB14周年纪念章
日期:2015-10-26 17:23:44ITPUB15周年纪念
日期:2018-02-09 14:12:58ITPUB18周年纪念章
日期:2018-09-17 10:09:4919周年集字徽章-庆
日期:2019-08-27 15:07:44状元
日期:2015-11-19 12:58:23
49#
发表于 2015-6-23 15:15 | 只看该作者
running_life 发表于 2015-6-23 14:26
装B一下哈,勿怪!!我觉得应该有漏字,应该是即使只需要提取1条记录,也必须物化整个结果集合。意思是如 ...

感谢分享!
你猜的是“1条记录”,而我猜是“几条记录”,嘿嘿,我忍住不去看英文原版……

使用道具 举报

回复
论坛徽章:
220
状元
日期:2015-08-13 09:42:33榜眼
日期:2015-08-03 13:57:54探花
日期:2015-07-31 13:44:02举人
日期:2015-07-01 15:00:51秀才
日期:2015-07-27 09:45:52进士
日期:2015-07-27 11:26:492015年中国系统架构师大会纪念徽章
日期:2015-07-23 09:58:092014系统架构师大会纪念章
日期:2015-07-23 09:58:092013系统架构师大会纪念章
日期:2015-07-23 09:58:092012系统架构师大会纪念章
日期:2015-07-23 09:58:09
50#
发表于 2015-6-26 13:59 | 只看该作者
1. 索引个数对于SQL解析性能的影响
一般来说,索引的个数不是越多越好,也不是越少越好。需要根据表的使用情况来决定索引的建立。一般来说经常用于WHERE条件查询的字段需要建立索引。而频繁更新的字段和表尽量不建立和少建立索引。

2. 如何有效使用索引和表结构来处理SQL语句
对经常出现在SQL查询WHERE中的条件建立索引能提高查询速度。

3. 前瞻性索引设计的核心思想是什么
应该就是要充分考虑数据库的向后兼容性,能在数据库早期设计的时候考虑到未来可以使用到的查询条件。

4. 说说您读完试读样章后的启发
只有40页,而20多页是目录。现在是大数据,NoSQL满天飞的时代,原来关系数据库在这样的时代中依旧很有用。

使用道具 举报

回复

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

本版积分规则 发表回复

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