有很长时间没有更新博客了,再过几天都2月分了,如果再不更新一篇,我1月分都没有更新,保持连续,今天更新一篇。

  最近没有什么看技术方面的东西,游戏,画画搞这些去了。我发现我每年一到年底就是搞这些东西,其实平时技术也搞得少。昨天看了一篇园友博客写的为什么要在自增列,时间上面建聚集索引,我今天更新一篇关于索引的东西。我翻出以前讲关于索引和创建索引的ppt复习一篇,下面就是关于索引的内容。

  1.先从字面,定义来理解一下索引。百度百科是这样来说的“将文献中具有检索意义的事项(可以是人名、地名、词语、概念、或其他事项)按照一定方式有序编排起来,以供检索的工具书”,从这一点可以看出索引是将一些关键的名词,项按一定的方式排起来,以供检索的工具,他不是内容,只是工具书。其实这些定义完全符合数据库中所说的索引。我目前在网上也没有找到对数据库中索引的定义,其实用上面的定义已经能解释数据库中的索引了。a.她不是内容,而是工具;b.她是将一些特殊的列(项)排一定的方式排起来的东西(后面会说到,这个东西就是B树);c.她是用来支持检索的;

  2.B树,说索引不能不说一下B树,B树是平衡树Balanced Tree.也就是叶子节点分布大致匀称(平衡)的树。有一种定义说的是:没有一个叶子节点到根节点的距离远得多的树。上面所说的东西,就是B树,可以说索引就是B树(当然说的是数据库中的索引,你说目录也是索引,但是他不是索,他可以是一个序列)。B树的查找很快,比如你想像一棵平衡二叉树,从根节点查找下来,一次就分成两部分,走一个分支,这样锁定目标就很快,当然数据库里面的B树不是二叉,是N叉,他的一个节点是一个页,所以这个数据层次不会很高,取数据也是一页一页的取数。我们了解一B树查找快以后,就知道为什么索引要组织成B树的结构了。

  3.上面了解了索引,B树,当然到目前可能还不是很清析,我们现在再来看看数据库表的结构。在MSSQL中表只有两种结构HOBT,这个HOBT是 Heep Or BTree,就是堆和B树的结构。现在我们接触到两个地方有B树了。一个是索引是B树,现在表也可能是B树。堆组织结构就没有B树复杂了,就是一块一块的空间。

  4.上面几个清楚了以后,现在来看几者的关系了。主要是说索引。索引是本文的核心。可能有人对上面的HOBT还有一点困惑,现在我们就来说明HOBT,哪些表是H,哪些表是BT呢?有聚集索引的表就是BT,无聚集索引的表就是H结构。通过聚集索引一下就把表的组织结构分成了两种。聚集索引是什么?聚集索引肯定是索引,所以她是一种特殊的索引,她的叶子节点就是数据项,不是数据项的复本。那普通的索引的叶子节点是数据项的复本。这两种索引的区别就在于叶子节点,聚集索引的叶子节点叫聚集键,由项和唯一标识组成(这个是由于项有重复的情况才会用到),非聚集索引的叶子节点叫书签,由文件号,而号,行号组成。看下面三个图,说明了几种情况,一种是表是一个聚集索引,表是一个非聚集索引,表是两种都有的情况。

有很多资料上都把索引的图正着画的,但是我认为这样子画会更好理解,比如叶子节点恰好就是一列数据,下面来看一下一个查询的图,比如

select * from tb where id=100;这种类型的,那么图就这样显示

在公司写,感觉还是说得不够详细,年后准备写后面不部分,说怎么创建索引。

总结一下这篇主要写的内容:

1.索引结构

2.B树和查找

3.表的结构

4.聚集索引和非聚集索引区别

4.几种不同情况的表上索引的结构(那几个图,很重要)。

数据库索引<一> 索引结构表结构的更多相关文章

  1. Mysql数据库(三)Mysql表结构管理

    一.MySQL数据类型 1.数字类型 (1)整数数据类型包括TINYINT/BIT/BOOL/SMALLINT/MEDIUMINT/INT/BIGINT (2)浮点数据类型包括FLOAT/DOUBLE ...

  2. PostgreSQL查看表、表索引、视图、表结构

    -- 表索引select * from pg_indexes where tablename='person_wechat_label';select * from pg_statio_all_ind ...

  3. PostgreSQL查看表、表索引、视图、表结构以及参数设置

    -- 表索引select * from pg_indexes where tablename='person_wechat_label';select * from pg_statio_all_ind ...

  4. 如何使用mysqldump命令导入导出数据库下的数据或表结构(远程or本地都适合)

    不多说,直接上干货! https://www.cloudera.com/documentation/manager/5-1-x/Cloudera-Manager-Installation-Guide/ ...

  5. MySQL数据库如何线上修改表结构

    一.MDL元数据锁 在修改表结构之前,先来看下可能存在的问题. 1.什么是MDL锁 MySQL有一个把锁,叫做MDL元数据锁,当对表修改的时候,会自动给表加上这把锁,也就是不需要自己显式使用. 当对表 ...

  6. 【转】sql server获取数据库名,表明,表结构

    1.查询数据库中的所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查询某个数据库中所有的表名: SELECT Name FR ...

  7. MySQL数据库基础(2)表结构管理

    目录 一.关系模型与数据表 二.MySQL数据类型 三.数据完整性约束 四.参照完整性约束 一.关系模型与数据表 概念 ①关系模型:是由若干个关系模式组成的集合,关系模式的实例称为关系,每个关系实际上 ...

  8. MSSQLSERVER数据库- 解决不允许保存更改表结构

    工具菜单----选项----Designers(设计器)----阻止保存要求重新创建表的更改 取消勾选

  9. PowerDesigner15连接Oracle数据库并导出Oracle的表结构

    PowerDesigner连接Oracle数据库,根据建立的数据源进行E-R图生成.详细步骤如下: 1.启动PowerDesigner 2.菜单:File->Reverse Engineer - ...

随机推荐

  1. 1,linux基础知识以及新建虚拟机

    1,Windows图形界面只是在个人电脑上普及(dos界面):lunix是在服务器领域,服务器上绝对不出现图形化界面(命令行). 2,2.6.18  主板本,次版本,末版本 如果末版本积累到一定程序就 ...

  2. HDU 5422 Rikka with Graph

    Rikka with Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. Scrum Meeting---Seven(2015-11-2)

    今日已完成任务和明日要做的任务 姓名 今日已完成任务 今日时间 明日计划完成任务 估计用时 董元财 完成了服务器实现 5h 服务器与客户端连接测试 4h 胡亚坤 客户端与服务器端的通信 2h 客户端与 ...

  4. 控制执行流程 Thinking in Java 第四章

    4.1 true 和 false *Java 不允许将一个数字作为布尔类型(虽然在C和C++中可以),使用时需要条件表达式将其转换为布尔类型: 如下: if( a!= 0) 4.2 if-else 4 ...

  5. [转载] YouCompleteMe

    原文: http://blog.marchtea.com/archives/161#rd?sukey=fc78a68049a14bb2ba33c15948d34749e1eb616df07efe977 ...

  6. Android notifications通知栏的使用

    app发送通知消息到通知栏中的关键代码和点击事件: package com.example.notifications; import android.os.Bundle; import androi ...

  7. VideoView

    [1]这个控件就是对surfaceview 和 meidiaplayer进行封装 [2]meidiaplayer 播放视频他只支持 3gp MP4格式    

  8. js知识点 知识树 知识结构 (转载 学习中)

  9. ios中javascript直接调用oc代码而非通过改变url回调方式(转)

    之前一个ios项目中,需要通过UIWebview来打开一个静态页面,并在静态页面中 调用相关object-c代码. 一.以前使用js调用object-c的方法 关于如何使用javascript调用ob ...

  10. 转!!常用的4种动态网页技术—CGI、ASP、JSP、PHP

    1.CGI   CGI(Common Gateway Interface,公用网关接口)是较早用来建立动态网页的技术.当客户端向Web服务器上指定的CGI程序发出请求时,Web服务器会启动一个新的进程 ...