`

横向比较数据库中不同的索引机制

 
阅读更多

http://database.51cto.com/art/200903/117477.htm

http://www.cnblogs.com/wq3if2in/archive/2009/04/02/1428068.html

http://wangyuanzju.blogbus.com/logs/35139229.html

http://mlxia.iteye.com/blog/279059

http://www.cnblogs.com/chuncn/archive/2009/04/15/1434385.html

 

http://cornerxp.iteye.com/blog/977463

http://blog.csdn.net/m1cr0s0ft/article/details/2636563

由于 InnodB 主键采用 聚集索引 ,会对插入的记录进行物理排序,而 UUID本身基本上是无序的,所以造成了巨大的 I/O 开销。所以如果使用 innodB 千万不要使用 UUID 。

 

我们做数据采集,每天数据将近7kw。就采用了uuid。也没有看到性能能慢到哪里去。 
数据库对于pk,会自动创建index。所以,对pk的检索完全走的index。检索的次数和采用number的pk理论应该一样。 
区别就是一个是数字的比较,一个是字符串的比较。虽然有字符串的比较比起数字比较来要耗时。但是,大头都在定位pk这头。所以,uuid 虽影响性能,但绝对可以接受。 

 

 

聚集索引:物理存储按照索引排序
非聚集索引:物理存储不按照索引排序

优势与缺点
聚集索引:插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入)
查询数据比非聚集数据的速度快

汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张” 字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。
 如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63 页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。
 通过以上例子,我们可以理解到什么是“聚集索引”和“非聚集索引”。
进一步引申一下,我们可以很容易的理解:每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。得出查询速度的方法是:在各个select语句前加:declare @d datetime

set @d=getdate()

并在select语句后加:

select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

1、用聚合索引比用不是聚合索引的主键速度快

2、用聚合索引比用一般的主键作order by时速度快,特别是在小数据量情况下
 事实上,如果数据量很小的话,用聚集索引作为排序列要比使用非聚集索引速度快得明显的多;而数据量如果很大的话,如10万以上,则二者的速度差别不明显。

3、使用聚合索引内的时间段,搜索时间会按数据占整个数据表的百分比成比例减少,而无论聚合索引使用了多少个

4 、日期列不会因为有分秒的输入而减慢查询速度

从publish 表中取出第 n 条到第 m 条的记录:
SELECT TOP m-n+1 *
FROM publish
WHERE (id NOT IN
    (SELECT TOP n-1 id
     FROM publish))

id 为publish 表的关键字

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

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

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

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

第1条多用在查询优化时,而第2条多用在进行分页时的数据排序。
 而聚集索引在每个表内又只能建立一个,这使得聚集索引显得更加的重要。聚集索引的挑选可以说是实现“查询优化”和“高效分页”的最关键因素。
 但要既使聚集索引列既符合查询列的需要,又符合排序列的需要,这通常是一个矛盾。

聚集索引是如此的重要和珍贵,所以一定要将聚集索引建立在:

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

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

二)何时使用聚集索引非聚集索引

下面的表总结了何时使用聚集索引非聚集索引很重要)。

动作描述

使用聚集索引

使用非聚集索引

列经常被分组排序

返回某范围内的数据

不应

一个或极少不同值

不应

不应

小数目的不同值

不应

大数目的不同值

不应

频繁更新的列

不应

外键列

主键列

频繁修改索引列

不应

每个表中只能有一个聚集索引的规则

分享到:
评论

相关推荐

    SQL Server数据库查询速度慢原因及优化方法

    1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要。 2、纵向、横向分割表,减少表的尺寸(sp_spaceuse) 3、升级...

    2021-数据库系统原理试题.docx

    2、散列索引与B+树索引相比较有何优缺点? 三、(20分) 设关系r1(A,B,C), r2(C,D,E)有如下特性:r1有20000个元组,r2有45000个元组,一块中可容纳25条r1元组或30条r2元组。使用以下连接策略的每一种计算r1和r2的...

    知乎-crawler是一个基于Java的高性能、支持免费http代理池、支持横向扩展、分布式爬虫项目.zip

    数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫...

    智能调度平台系统技术要求.pdf

    2.4数据库管理系统须具备良好的数据和索引的压缩技术,具有 较低的空间膨胀率;在系统硬件资源允许的条件下(如服务 器内存不小于2G),对超大型数据库及结构化/非结构化复杂 查询实现响应的时间能够达到亚秒级,...

    Hadoop权威指南(中文版)2015上传.rar

    1.4 和传统数据库进行比较 1.4.1 读时模式(Schema on Read)vs.写时模式(Schema on Write) 1.4.2 更新、事务和索引 1.5 HiveQL 1.5.1 数据类型 1.5.2 操作和函数 1.6 表 1.6.1 托管表(Managed Tables)和外部表...

    易语言程序免安装版下载

    修改外部数据库在4.12版中导致的不兼容问题,并增加了对MS SQL Server数据库中image和text字段类型的说明。 7. 修改扩展界面支持库一,禁止透明标签在父窗口刷新时自动刷新,以解决其导致窗口刷新缓冲的问题。 8....

    Hadoop权威指南 第二版(中文版)

     1.4 和传统数据库进行比较  1.4.1 读时模式(Schema on Read)vs.写时模式(Schema onWrite)  1.4.2 更新、事务和索引  1.5 HiveQL  1.5.1 数据类型  1.5.2 操作和函数  1.6 表  1.6.1 托管表(Managed Tables)...

    蚂蚁云客服机器人面试答案.docx

    数据库:Mysql(缓存命中、索引、单条SQL性能、数据库线程数、数据池连接数) 中间件:1.消息2、负载均衡3、缓存(包括线程数、连接数、日志)。 网络: 吞吐量、吞吐率 应用: jvm内存、日志、Full GC频率 3、...

    基于大数据平台数据分析技术选型调研.pdf

    容量⼤:Hbase单表可以有百亿⾏、百万列,数据矩阵横向和纵向两个维度所⽀持的数据量级都⾮常具有弹性 2. 列存储:其数据在表中是按照某列存储的,这样在查询只需要少数⼏个字段的时候,能⼤⼤减少读取的数量,可以...

    appng:appNG是一个开放源代码,可横向扩展的应用程序平台,可有效地开发和运行应用程序。 它可用于构建应用程序平台即服务(aPaaS)

    欢迎使用appNG appNG是基于和的Web应用程序平台和Web应用程序框架。 借助appNG,您可以在几分钟之内构建自己的应用程序并将其部署到平台。 appNG非常适合创建和运行自己的应用程序... 支持索引和搜索,由提供支持

    大数据处理框架.pdf

    MapReduce的伟⼤ 之处在于给⼤众们普及了⼯业界对于⼤数据计算的理解:它提供了良好的横向扩展性和容错处理机制,⾄此⼤数据计算由集中式过渡⾄分布 式。以前,想对更多的数据进⾏计算就要造更快的计算机,⽽现在只...

Global site tag (gtag.js) - Google Analytics