数据库索引<一> 索引结构表结构
有很长时间没有更新博客了,再过几天都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 - ...
随机推荐
- CUBRID学习笔记 26 数据类型3cubrid教程
接上面的集合 集合之 set 每个集合元素是不同的值, 但是类型只能是一种.也可以有其他表的记录 如下 CREATE TABLE set_tbl ( col_1 set(CHAR(1))); INSE ...
- hdu 1700 Points on Cycle(坐标旋转)
http://acm.hdu.edu.cn/showproblem.php?pid=1700 Points on Cycle Time Limit: 1000/1000 MS (Java/Others ...
- run a Freight robot (1)
1. Freight robot The Fetch and Freight Research Edition Robots are indoor laboratory robots. Coordin ...
- Nginx基础知识————生成自签名ca 证书 使nginx 支持https
创建服务器私钥,命令会让你输入一个口令: $ openssl genrsa -des3 -out server.key 1024 创建签名请求的证书(CSR): $ openssl req -new ...
- Jquery中css()方法获取边框长度
1. JQuery中可以使用css()方法获取块元素的边框宽度,如下: $("divMode").css("border-left-width");//左边框长 ...
- bootstrap学习笔记<十>(按钮组,导航)
1)按钮组.样式:class="btn-group" <div class="btn-group"> <button class=" ...
- ora-01033:oracle initialization or shutdown in progress 解决方法
今天研究Oracle遇到了这个问题ora-01033:oracle initialization or shutdown in progress,经过分析研究终于解决了,写下来纪念一下.我的库是ora ...
- MyEclipse/Eclipse中XML文件的格式化配置
Eclipse中XML文件的格式化配置 MyEclipse: 这一步的配置是使格式化的效果为控件的每个属性配置占一行.进入 Window/Preferences,展开到 XML/XML Resourc ...
- kafka - topic
http://www.cnblogs.com/yurunmiao/p/5550906.html http://www.cnblogs.com/chushiyaoyue/p/5695826.html
- 启动eclipse说在sdk目录下的platforma-tools下面找不到adb.exe
adb是什么?adb有什么用?adb工具如何用? 是用来管理模拟器和真机的通用调试工具,该工具功能强大,直接打开cmd即可使用adb命令,adb的全称为Android Debug Bridge,是 ...