楼主: pipihappy8888

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

[复制链接]
论坛徽章:
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
31#
发表于 2015-6-17 16:43 | 只看该作者
既然两位作者来了,有个疑问:
图中的这句话,意思不是太理解,能说明一下吗?

使用道具 举报

回复
论坛徽章:
29
茶鸡蛋
日期:2013-01-16 10:42:10红孩儿
日期:2014-03-04 16:40:38马上有车
日期:2014-03-27 09:27:03马上加薪
日期:2014-03-27 09:33:52马上有车
日期:2014-04-08 12:28:472014年世界杯参赛球队: 韩国
日期:2014-06-05 09:57:31itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50
32#
发表于 2015-6-17 22:31 | 只看该作者
本帖最后由 wzz123snow 于 2015-6-17 22:32 编辑

1. 索引个数对于SQL解析性能的影响

建立索引只为了优化查询,提高查询效率。但是索引会影响DML的效率。

索引的个数不是越多越好,相反,如果索引过多,可能会拖垮应用。索引需要定期做好监控,可以先将不常用的索引设置为不可见,然后再观察,确定没用了,再把没用的索引DROP掉。


2. 如何有效使用索引和表结构来处理SQL语句

索引的使用需要结合执行计划一起来看。建立索引后,看看执行计划是否改变,SQL从执行时间上是否变快,执行计划上逻辑读、物理读是否降低。

通过谓词以及业务逻辑建立索引时,需要观察所建立的索引选择性如何。

正确建立组合索引的方式没有明确的,个人的经验是WHERE 列在前, JOIN 列在中间,select列在最后。


3. 前瞻性索引设计的核心思想是什么

通过对业务逻辑的理解在系统上线前,建立最合理的索引,保证系统的平稳运行,使系统性能得到提升。

对数据量以及应用场景进行评估,不仅仅是所索引的设计,同时也包括表的设计,是否作为分区表,是否要建立分区索引,等等。



4. 说说您读完试读样章后的启发



作者对选择性和过滤因子的概念比其他书籍有更深层面的理解,感觉很好。

之前一直对这两个概念是分开理解的,现在可以结合到一起了。好书值得推荐。


使用道具 举报

回复
论坛徽章:
29
茶鸡蛋
日期:2013-01-16 10:42:10红孩儿
日期:2014-03-04 16:40:38马上有车
日期:2014-03-27 09:27:03马上加薪
日期:2014-03-27 09:33:52马上有车
日期:2014-04-08 12:28:472014年世界杯参赛球队: 韩国
日期:2014-06-05 09:57:31itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50
33#
发表于 2015-6-17 22:41 | 只看该作者
alibull 发表于 2015-6-12 22:12
在删索引前,我会综合以下2条
1.按索引的使用次数。使用次数越小甚至为0,可以删。
2.按照user_indexes的 ...

可以先设置为不可见,这样优化器就不会使用索引,然后观察,进行删除。

使用道具 举报

回复
论坛徽章:
29
茶鸡蛋
日期:2013-01-16 10:42:10红孩儿
日期:2014-03-04 16:40:38马上有车
日期:2014-03-27 09:27:03马上加薪
日期:2014-03-27 09:33:52马上有车
日期:2014-04-08 12:28:472014年世界杯参赛球队: 韩国
日期:2014-06-05 09:57:31itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50
34#
发表于 2015-6-17 22:45 | 只看该作者
2009532140 发表于 2015-6-11 17:42
这个话题比较好。
这本书,记得兔子在哪里提起过,我好像有英文原版的,没看~
这本翻译版的,这么多大牛来 ...

英文版的有呗,给发给呗

使用道具 举报

回复
论坛徽章:
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
35#
发表于 2015-6-18 08:21 | 只看该作者
hai503 发表于 2015-6-17 16:43
既然两位作者来了,有个疑问:
图中的这句话,意思不是太理解,能说明一下吗?

我不是作者,但这句话应该可以这么理解:

假设你查询后的结果集是100条,但现在你只需要TOP 1条记录,此时,数据库还是要对这100条数据进行排序后,才能给出符合用户要求的1条记录。

另外,我认为,这个不应该是数据库设计人员应该牢记的事情,毕竞SQL语句的编写,是开发人员应更多关注的事情。

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

使用道具 举报

回复
论坛徽章:
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
36#
发表于 2015-6-18 08:39 | 只看该作者
baijiong998 发表于 2015-6-18 08:21
我不是作者,但这句话应该可以这么理解:

假设你查询后的结果集是100条,但现在你只需要TOP 1条记录, ...

感谢分享!
样章里这句话也可能有印刷错误。

使用道具 举报

回复
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
37#
发表于 2015-6-18 11:53 | 只看该作者
本帖最后由 buptdream 于 2015-7-3 16:36 编辑


ssss

使用道具 举报

回复
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
38#
发表于 2015-6-18 13:52 | 只看该作者
最近好书比较少,这算一本值得花时间的书

使用道具 举报

回复
论坛徽章:
29
茶鸡蛋
日期:2013-01-16 10:42:10红孩儿
日期:2014-03-04 16:40:38马上有车
日期:2014-03-27 09:27:03马上加薪
日期:2014-03-27 09:33:52马上有车
日期:2014-04-08 12:28:472014年世界杯参赛球队: 韩国
日期:2014-06-05 09:57:31itpub13周年纪念徽章
日期:2014-09-28 10:55:55itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50
39#
发表于 2015-6-18 20:16 | 只看该作者
关于创建索引,还有一个比较常见的场景。
Nested loop 的时候,大表和小表进行关联,小表作为驱动表,大表作为被驱动表,被驱动表上最好有索引。

使用道具 举报

回复
论坛徽章:
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
40#
发表于 2015-6-19 09:22 | 只看该作者
baijiong998 发表于 2015-6-18 08:21
我不是作者,但这句话应该可以这么理解:

假设你查询后的结果集是100条,但现在你只需要TOP 1条记录, ...

我有点不同意见,数据库设计人员也需要考虑到这个结构和数据内容需要怎么样考虑。个人觉得,如果数据库设计做的好,技术人员的sql操作也会或者只能沿着设计的思路走。

使用道具 举报

回复

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

本版积分规则 发表回复

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