聚集索引的重要性和如何选择聚集索引

  在上一节的标题中,笔者写的是:实现小数据量和海量数据的通用分页显示存储过程。这是因为在将本存储过程应用于“办公自动化”系统的实践中时,笔者发现这第三种存储过程在小数据量的情况下,有如下现象:

  1、分页速度一般维持在1秒和3秒之间。

  2、在查询最后一页时,速度一般为5秒至8秒,哪怕分页总数只有3页或30万页。

  虽然在超大容量情况下,这个分页的实现过程是很快的,但在分前几页时,这个1-3秒的速度比起第一种甚至没有经过优化的分页方法速度还要慢,借用户的话说就是“还没有ACCESS数据库速度快”,这个认识足以导致用户放弃使用您开发的系统。

  笔者就此分析了一下,原来产生这种现象的症结是如此的简单,但又如此的重要:排序的字段不是聚集索引!

  本篇文章的题目是:“查询优化及分页算法方案”。笔者只所以把“查询优化”和“分页算法”这两个联系不是很大的论题放在一起,就是因为二者都需要一个非常重要的东西――聚集索引。

  在前面的讨论中我们已经提到了,聚集索引有两个最大的优势:

  1、以最快的速度缩小查询范围。

  2、以最快的速度进行字段排序。

  第1条多用在查询优化时,而第2条多用在进行分页时的数据排序。

  而聚集索引在每个表内又只能建立一个,这使得聚集索引显得更加的重要。聚集索引的挑选可以说是实现“查询优化”和“高效分页”的最关键因素。

  但要既使聚集索引列既符合查询列的需要,又符合排序列的需要,这通常是一个矛盾。

  笔者前面“索引”的讨论中,将fariqi,即用户发文日期作为了聚集索引的起始列,日期的精确度为“日”。这种作法的优点,前面已经提到了,在进行划时间段的快速查询中,比用ID主键列有很大的优势。

  但在分页时,由于这个聚集索引列存在着重复记录,所以无法使用max或min来最为分页的参照物,进而无法实现更为高效的排序。而如果将ID主键列作为聚集索引,那么聚集索引除了用以排序之外,没有任何用处,实际上是浪费了聚集索引这个宝贵的资源。

  为解决这个矛盾,笔者后来又添加了一个日期列,其默认值为getdate()。用户在写入记录时,这个列自动写入当时的时间,时间精确到毫秒。即使这样,为了避免可能性很小的重合,还要在此列上创建UNIQUE约束。将此日期列作为聚集索引列。

  有了这个时间型聚集索引列之后,用户就既可以用这个列查找用户在插入数据时的某个时间段的查询,又可以作为唯一列来实现max或min,成为分页算法的参照物。

  经过这样的优化,笔者发现,无论是大数据量的情况下还是小数据量的情况下,分页速度一般都是几十毫秒,甚至0毫秒。而用日期段缩小范围的查询速度比原来也没有任何迟钝。

  聚集索引是如此的重要和珍贵,所以笔者总结了一下,一定要将聚集索引建立在:

  1、您最频繁使用的、用以缩小查询范围的字段上;

  2、您最频繁使用的、需要排序的字段上。

转载于:https://www.cnblogs.com/mqsuper/archive/2008/09/18/1292991.html

sql 优化之:聚集索引的重要性和如何选择聚集索引(系列五)相关推荐

  1. 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化

    25.数据查询与写入优化 25.1.分布式子查询优化 25.1.1.分布式表的IN查询示例1(普通IN子查询.IN子查询为本地表) 25.1.2.分布式表的IN查询示例2(普通IN子查询.IN子查询为 ...

  2. sql优化之:深入浅出理解索引(系列二)(讲解非常透彻)

    (四)其他书上没有的索引使用经验总结 1.用聚合索引比用不是聚合索引的主键速度快 下面是实例语句:(都是提取25万条数据) select gid,fariqi,neibuyonghu,reader,t ...

  3. 15 种 SQL 优化中,老司机才懂的处理技巧

    前言 SQL优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有可能是优化SQL语句,因为它 ...

  4. 这次被问懵了!搞定了这些SQL优化技巧,下次横着走

    SQL 优化已经成为衡量程序猿优秀与否的硬性指标,甚至在各大厂招聘岗位职能上都有明码标注,如果是你,在这个问题上能吊打面试官还是会被吊打呢? 有朋友疑问到,SQL 优化真的有这么重要么?如下图所示,S ...

  5. 搞懂这些SQL优化技巧,面试横着走

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 来源:sohu.gg/FGG98 SQL 优化已经成为衡量程序猿优秀与否的 ...

  6. 索引深入浅出(6/10):选择正确并合适的聚集索引键

    今天我们来探讨下聚集索引的设计要求.在选择聚集索引键时,有好几点需要考虑的.选择聚集索引键没有硬性规定.多实践,多从网上找问题的答案都会帮你找到正确的索引键. 唯一性(Uniqueness) SQL ...

  7. 拼装sql_2020最新最全面的SQL优化干货总结

    作者:_陈哈哈原文:https://sohu.gg/FGG98i BATJTMD 等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直不变的重点就是对 SQL 优化经验的考察.一提到数据库,面试官 ...

  8. sql优化的15个小技巧(必知五颗星),面试说出七八个就有了

    目录 前言 1 避免使用select * 2 用union all代替union 3 小表驱动大表 4 批量操作 5 多用limit 6 in中值太多 7 增量查询 8 高效的分页 9 用连接查询代替 ...

  9. 面试必备:聊聊sql优化的15个小技巧

    sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有可能是优化sql语句,因为它的改造 ...

最新文章

  1. SAP SD基础知识之与FI集成相关的流程与配置
  2. js获取本周、本月、本季、本年的第一天
  3. SQLServer过期的解决方案
  4. 如何使用iOS AddressBook
  5. php 数据库 加载图片,图片显示不出来,但是数据库里有显示
  6. TensorFlow学习笔记(二十一) tensorflow机器学习模型
  7. python 覆盖list_【Python妙招】gt;gt;gt;看腻了能不能换成别的啊……当然可以啦:)...
  8. python之函数基础
  9. Tomcat绑定jre
  10. 《机器学习》二刷超详细笔记| 第一章 绪论
  11. amd编码器 hevc_HEVC/H.265硬件编码器实现杂谈
  12. python酒店管理系统案例
  13. windows 7 自带计算器详解
  14. php蘑菇街商城源码,php源码:dedecms精仿蘑菇街(mogujie.com)源码,时尚购物社区源码...
  15. 将1自动补位为01_苹果图标自动补位怎么关闭
  16. vs2015调试时无法显示QString变量的值,只显示地址
  17. 感谢csdn 2021年中秋月饼礼盒
  18. 腾讯广告终于迎来全面整合
  19. ant design vue中a-table中使用a-tag和a-switch
  20. 【路由器】TP Link TL-WR702N 迷你路由器为何无法进入管理后台

热门文章

  1. SwiftUI编辑文字和图片
  2. python同步异步_python中Tornado的同步与异步I/O的介绍(附示例)
  3. thinkphp mysql desc table_Thinkphp 连接数据库、查询、添加
  4. python requests cookies请求_python的requests库怎么发送带cookies的请求
  5. 探索频道和谷歌联合制作七大洲人文VR视频,11月3日可收看
  6. 万物皆可JOJO:这个GAN直接让马斯克不做人啦 | Demo可玩
  7. 这十大科学文献最烂配图,你可千万别学
  8. 放话挑战GPT-3!以色列推出参数多30亿、词条多5倍的新语言模型|公测不用排队...
  9. 特斯拉撤诉和解,小鹏汽车沉冤得雪:警惕自动驾驶领域的“美国陷阱”
  10. 他入狱10年自学数学,如今凭借手稿发了篇论文,被同行评价“足以开辟数论新领域”...