数据库索引<一> 索引结构表结构
有很长时间没有更新博客了,再过几天都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.几种不同情况的表上索引的结构(那几个图,很重要)。
数据库索引<一> 索引结构表结构的更多相关文章
- Mysql数据库(三)Mysql表结构管理
一.MySQL数据类型 1.数字类型 (1)整数数据类型包括TINYINT/BIT/BOOL/SMALLINT/MEDIUMINT/INT/BIGINT (2)浮点数据类型包括FLOAT/DOUBLE ...
- PostgreSQL查看表、表索引、视图、表结构
-- 表索引select * from pg_indexes where tablename='person_wechat_label';select * from pg_statio_all_ind ...
- PostgreSQL查看表、表索引、视图、表结构以及参数设置
-- 表索引select * from pg_indexes where tablename='person_wechat_label';select * from pg_statio_all_ind ...
- 如何使用mysqldump命令导入导出数据库下的数据或表结构(远程or本地都适合)
不多说,直接上干货! https://www.cloudera.com/documentation/manager/5-1-x/Cloudera-Manager-Installation-Guide/ ...
- MySQL数据库如何线上修改表结构
一.MDL元数据锁 在修改表结构之前,先来看下可能存在的问题. 1.什么是MDL锁 MySQL有一个把锁,叫做MDL元数据锁,当对表修改的时候,会自动给表加上这把锁,也就是不需要自己显式使用. 当对表 ...
- 【转】sql server获取数据库名,表明,表结构
1.查询数据库中的所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查询某个数据库中所有的表名: SELECT Name FR ...
- MySQL数据库基础(2)表结构管理
目录 一.关系模型与数据表 二.MySQL数据类型 三.数据完整性约束 四.参照完整性约束 一.关系模型与数据表 概念 ①关系模型:是由若干个关系模式组成的集合,关系模式的实例称为关系,每个关系实际上 ...
- MSSQLSERVER数据库- 解决不允许保存更改表结构
工具菜单----选项----Designers(设计器)----阻止保存要求重新创建表的更改 取消勾选
- PowerDesigner15连接Oracle数据库并导出Oracle的表结构
PowerDesigner连接Oracle数据库,根据建立的数据源进行E-R图生成.详细步骤如下: 1.启动PowerDesigner 2.菜单:File->Reverse Engineer - ...
随机推荐
- JS实现 键盘操作
JS实现 键盘操作: 详情可以去其逛网查看其API并下载,地址:http://craig.is/killing/mice <!DOCTYPE html PUBLIC "-//W3C// ...
- Android——GridLayout
转载自http://www.cnblogs.com/over140/archive/2011/12/08/2280224.html 欢迎大家转载 前言 本章内容android.widget.GridL ...
- RedHat安装DB2详细步骤(附卸载、备份恢复步骤)
1.创建用户组和用户 说明: 步骤1 以root用户登录需要安装DB2的服务器. 步骤2 创建用户组和用户. # su -root # groupdel db2grp # groupdel db2fg ...
- Codeforces Round #199 (Div. 2)
A.Xenia and Divisors 题意:给定N个数,每个数的取值范围为1-7,N是3的倍数,判定是否能够恰好将N个数分成若干三元组,使得一个组中的元素a,b,c满足 a < b < ...
- Codeforces 713C Sonya and Problem Wihtout a Legend
题意:给一个序列,可以进行若干次操作,每次操作选择一个数让它+1或-1,问最少要几次操作使得序列变为严格单调递增序列. 题解:首先考虑非严格递增序列,则每个数字最终变成的数字一定是该数组中的某个数.那 ...
- system v和posix的共享内存对比 & 共享内存位置
参考 http://www.startos.com/linux/tips/2011012822078.html 1)Linux和所有的UNIX操作系统都允许通过共享内存在应用程序之间共享存储空间. 2 ...
- MyBatis——解决字段名与实体类属性名不相同的冲突
原文:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况 ...
- 【linux命令】:查看当前登录用户的信息,本文介绍3种方法
作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动.有些时候,你甚至需要知道他(她)们正在做什么.本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法. 1. 使用w ...
- Linux上安装Mysql后除了本机其他机器不能访问的问题(zhuan)
http://blog.sina.com.cn/s/blog_a338027c0101esbs.html http://niutuku.com/tech/Mysql/237638.shtml http ...
- K均值聚类(Kmeans)
Sigma = [1, 0; 0, 1]; mu1 = [1, -1]; x1 = mvnrnd(mu1, Sigma, 200); mu2 = [5.5, -4.5]; x2 = mvnrnd(mu ...