`

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

 
阅读更多

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、您最频繁使用的、需要排序的字段上。

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

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

动作描述

使用聚集索引

使用非聚集索引

列经常被分组排序

返回某范围内的数据

不应

一个或极少不同值

不应

不应

小数目的不同值

不应

大数目的不同值

不应

频繁更新的列

不应

外键列

主键列

频繁修改索引列

不应

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

分享到:
评论

相关推荐

    数据库面试题(汇总所有的数据库面试题).zip

    - 索引:如何创建、使用和维护索引,以及不同类型的索引(如B树、哈希索引)。 - 查询优化:如何编写高效的SQL查询,避免全表扫描,理解查询执行计划。 - 表分区:分区的作用,如何选择合适的分区策略。 4. ...

    数据库常见疑问

    本文围绕数据库应用中常见的问题进行了详细的解答,涵盖了数据库的基本概念、节点数据库的特点与优势、数据库系统的构成及其核心功能等多个方面。通过本文的学习,可以帮助读者更好地理解数据库相关知识,并在实际...

    Chapter5-厦门大学-林子雨-大数据技术原理与应用-第五章-NoSQL数据库31.pptx

    NoSQL 数据库可以实现高效的简单查询,但是不具备高度结构化查询等特性,复杂查询的性能不尽人意,而关系数据库借助于索引机制可以实现快速查询。 5.4 NoSQL 的四大类型 ------------------- NoSQL 数据库可以分为...

    Cache数据库日常管理和维护手册

    2. **横向扩展**:当单个数据库实例无法满足需求时,如何进行水平扩展,例如添加更多服务器,构建分布式数据库。 3. **数据迁移**:在不中断服务的前提下,实现数据库的平滑迁移,包括数据复制和同步。 ### 六、高...

    网络数据库技术课件

    8. 数据库管理系统(DBMS):理解不同DBMS的工作原理,比如事务管理、并发控制、恢复机制等。 9. NoSQL与NewSQL:介绍非关系型数据库的灵活性和横向扩展性,以及NewSQL如何在保持高并发性能的同时兼顾ACID特性。 ...

    互联网数据库详细版.docx

    2. 索引设计:为了加快数据的查询速度,互联网数据库需要建立合适的索引机制。例如,建立倒排索引、前缀索引等。 3. 数据缓存:为了减少数据库的访问次数,提高系统性能,互联网数据库采用缓存技术,将经常访问的...

    中国人大数据库系统概论课件

    2. NewSQL数据库:保持SQL接口的同时,针对大数据和高并发场景优化,提供高性能和横向扩展能力。 八、数据库发展趋势 1. 大数据处理:利用Hadoop、Spark等工具处理PB级甚至EB级数据。 2. 数据仓库与OLAP:支持在线...

    58数据库设计军规

    为了提高系统的整体性能,应该将复杂的业务逻辑放在应用服务层执行,这样不仅能够减轻数据库的压力,还能通过增加服务器数量轻松实现性能的横向扩展。 **5. 禁止存储大文件或者大照片** - **解读**:大文件和图片等...

    紫金桥实时数据库资料

    实时数据库在信息技术领域中扮演着至关重要的角色,特别是在工业自动化、物联网(IoT)和大数据分析等场景。紫金桥实时数据库是一款专为处理高速、海量实时数据而设计的高效数据库系统,它能够快速存储、管理和分析...

    2012中国数据库技术大会资料

    10. **数据库发展趋势**:可能涵盖了新兴的技术,如NewSQL(兼顾ACID特性和横向扩展能力的新一代数据库)、图形数据库、内存数据库等。 通过【2012中国数据库技术大会】的资料,我们可以深入了解当时的数据库技术...

    MySQL Innodb 索引原理详解

    ### MySQL Innodb 索引原理...通过对比不同的树形结构,我们了解到B+树为何成为数据库索引的理想选择。此外,还讨论了InnoDB与MyISAM的主要差异,以及索引的插入和删除操作。对于理解和优化MySQL数据库的性能至关重要。

    SophicDB:一个高性能分布式实时数据库系统.pdf

    为了适应不同的应用场景,SophicDB采取了与传统数据库相仿的设计策略,同时又在数据组织和存储方式上进行了创新,实现了类似并行数据库和内存数据库的可扩展性和高性能。SophicDB还提供了一些独特的特性,例如离线...

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

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

    NoSQL数据库入门 高清PDF

    2. **高性能**:NoSQL数据库采用内存缓存技术和优化的索引机制,能够实现快速读写操作。 3. **灵活的数据模型**:NoSQL数据库允许存储复杂的数据类型,如嵌套对象、数组等,这使得数据模型更加灵活多变。 4. **弱...

    SqlServer数据库下载

    SQL Server是由微软开发的一款关系型数据库管理系统(RDBMS),广泛应用于企业级应用中。它提供了强大的数据存储、处理和分析能力,支持多种数据类型,包括文本、图像等复杂数据格式,并且具备高度可扩展性,能够...

    基于云的高性能分布式内存数据库的开发技术

    - **高效的查询机制**:采用索引技术、查询优化算法等手段,确保查询的高效执行。 - **支持实时数据分析**:通过快速的数据处理能力,可以实现实时数据流的分析处理,满足现代应用的需求。 #### 架构分析 ##### ...

    MySQL分库分表无限扩容后的瓶颈及解决方案.docx

    MySQL 的索引机制也将在文章中被讨论。索引是 MySQL 中的一种机制,旨在提高查询速度。文章将讨论聚集索引、覆盖索引、索引下推等概念。 此外,文章还将讨论 MySQL 的事务机制。事务是 MySQL 中的一种机制,旨在...

    Alibaba数据库运维最佳实践

    阿里巴巴作为全球领先的电商平台,在其发展过程中,数据库技术经历了从PC服务器到小型机、从集中式Oracle数据库到分布式MySQL数据库的重大转变。这一过程伴随着“成长的烦恼”: - **从PC服务器到小型机**:随着...

    整理MYSQL中关于索引的相关面试题集

    综上所述,理解MySQL中的索引机制和优化策略是提高数据库性能的关键。通过对索引数据结构的掌握,我们可以更好地设计查询,以实现高效的数据库操作。同时,利用`EXPLAIN`分析执行计划,可以找出性能瓶颈并针对性地...

    sqlserver的大批量数据的处理以及数据库的优化

    1. **分散数据、日志和索引**:将这些组件分别放置在不同的 I/O 设备上可以显著提高读取速度。 2. **表的纵向和横向分割**:减少单个表的尺寸有助于提高性能。 3. **硬件升级**:增加 CPU 数量、内存容量等硬件资源...

Global site tag (gtag.js) - Google Analytics