sql 优化之:聚集索引的重要性和如何选择聚集索引(系列五)
聚集索引的重要性和如何选择聚集索引
在上一节的标题中,笔者写的是:实现小数据量和海量数据的通用分页显示存储过程。这是因为在将本存储过程应用于“办公自动化”系统的实践中时,笔者发现这第三种存储过程在小数据量的情况下,有如下现象:
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 优化之:聚集索引的重要性和如何选择聚集索引(系列五)相关推荐
- 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化
25.数据查询与写入优化 25.1.分布式子查询优化 25.1.1.分布式表的IN查询示例1(普通IN子查询.IN子查询为本地表) 25.1.2.分布式表的IN查询示例2(普通IN子查询.IN子查询为 ...
- sql优化之:深入浅出理解索引(系列二)(讲解非常透彻)
(四)其他书上没有的索引使用经验总结 1.用聚合索引比用不是聚合索引的主键速度快 下面是实例语句:(都是提取25万条数据) select gid,fariqi,neibuyonghu,reader,t ...
- 15 种 SQL 优化中,老司机才懂的处理技巧
前言 SQL优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有可能是优化SQL语句,因为它 ...
- 这次被问懵了!搞定了这些SQL优化技巧,下次横着走
SQL 优化已经成为衡量程序猿优秀与否的硬性指标,甚至在各大厂招聘岗位职能上都有明码标注,如果是你,在这个问题上能吊打面试官还是会被吊打呢? 有朋友疑问到,SQL 优化真的有这么重要么?如下图所示,S ...
- 搞懂这些SQL优化技巧,面试横着走
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 来源:sohu.gg/FGG98 SQL 优化已经成为衡量程序猿优秀与否的 ...
- 索引深入浅出(6/10):选择正确并合适的聚集索引键
今天我们来探讨下聚集索引的设计要求.在选择聚集索引键时,有好几点需要考虑的.选择聚集索引键没有硬性规定.多实践,多从网上找问题的答案都会帮你找到正确的索引键. 唯一性(Uniqueness) SQL ...
- 拼装sql_2020最新最全面的SQL优化干货总结
作者:_陈哈哈原文:https://sohu.gg/FGG98i BATJTMD 等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直不变的重点就是对 SQL 优化经验的考察.一提到数据库,面试官 ...
- sql优化的15个小技巧(必知五颗星),面试说出七八个就有了
目录 前言 1 避免使用select * 2 用union all代替union 3 小表驱动大表 4 批量操作 5 多用limit 6 in中值太多 7 增量查询 8 高效的分页 9 用连接查询代替 ...
- 面试必备:聊聊sql优化的15个小技巧
sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有可能是优化sql语句,因为它的改造 ...
最新文章
- SAP SD基础知识之与FI集成相关的流程与配置
- js获取本周、本月、本季、本年的第一天
- SQLServer过期的解决方案
- 如何使用iOS AddressBook
- php 数据库 加载图片,图片显示不出来,但是数据库里有显示
- TensorFlow学习笔记(二十一) tensorflow机器学习模型
- python 覆盖list_【Python妙招】gt;gt;gt;看腻了能不能换成别的啊……当然可以啦:)...
- python之函数基础
- Tomcat绑定jre
- 《机器学习》二刷超详细笔记| 第一章 绪论
- amd编码器 hevc_HEVC/H.265硬件编码器实现杂谈
- python酒店管理系统案例
- windows 7 自带计算器详解
- php蘑菇街商城源码,php源码:dedecms精仿蘑菇街(mogujie.com)源码,时尚购物社区源码...
- 将1自动补位为01_苹果图标自动补位怎么关闭
- vs2015调试时无法显示QString变量的值,只显示地址
- 感谢csdn 2021年中秋月饼礼盒
- 腾讯广告终于迎来全面整合
- ant design vue中a-table中使用a-tag和a-switch
- 【路由器】TP Link TL-WR702N 迷你路由器为何无法进入管理后台
热门文章
- SwiftUI编辑文字和图片
- python同步异步_python中Tornado的同步与异步I/O的介绍(附示例)
- thinkphp mysql desc table_Thinkphp 连接数据库、查询、添加
- python requests cookies请求_python的requests库怎么发送带cookies的请求
- 探索频道和谷歌联合制作七大洲人文VR视频,11月3日可收看
- 万物皆可JOJO:这个GAN直接让马斯克不做人啦 | Demo可玩
- 这十大科学文献最烂配图,你可千万别学
- 放话挑战GPT-3!以色列推出参数多30亿、词条多5倍的新语言模型|公测不用排队...
- 特斯拉撤诉和解,小鹏汽车沉冤得雪:警惕自动驾驶领域的“美国陷阱”
- 他入狱10年自学数学,如今凭借手稿发了篇论文,被同行评价“足以开辟数论新领域”...