数据库索引<一> 索引结构表结构
有很长时间没有更新博客了,再过几天都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 - ...
随机推荐
- [SAP ABAP开发技术总结]BAPI调用
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- NoSQL数据库的分布式模型
NoSQL数据库的分布式模型 单一服务器 在一个服务器完全能够胜任工作时就没必要考虑分布式,这样部署简单,维护也方便很多: 分片 特点 数据的各个部分存放在集群的不同服务器中: 比如按字母来划分:以a ...
- SQL SERVER 2005中同义词实例
From : http://www.cnblogs.com/jackyrong/archive/2006/11/15/561287.html 在SQL SERVER 2005中,终于出现了同义词了,大 ...
- bzoj 1202: [HNOI2005]狡猾的商人 并查集好题
1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2946 Solved: 1384[Submit][Sta ...
- 利用EL表达式+JSTL在客户端取得数据 示例
<%@page import="cn.gbx.domain.Address"%> <%@page import="cn.gbx.domain.User& ...
- NS3 日志(Logging)、命令行参数、Tracing系统概述(转载)
NS-3日志子系统的提供了各种查看仿真结果的渠道: 一.使用Logging Module 1 [预备知识]日志级别及其对应的宏 NS-3 提供了若干个日志级别来满足不同的 Debug 需求,每一级的日 ...
- [转载] Python的GIL是什么鬼,多线程性能究竟如何
原文: http://cenalulu.github.io/python/gil-in-python/ GIL是什么 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器( ...
- poj3334Connected Gheeves(二分)
链接 二分高度,算面积的地方有点麻烦,没有用求交点的模板,直接自己按三角形相似手算了一下,写的有点麻烦. 上下界直接取水可放的最高点以及最低点. 自己的长得很挫的代码 #include <ios ...
- 用python实现把数字人民币金额转换成大写的脚本程序
# -*- coding: utf-8 -*- def Num2MoneyFormat( change_number ): """ .转换数字为大写货币格式( forma ...
- java文件操作(读流)
try{ InputStream is = new FileInputStream("abc.txt"); InputStreamReader ir = new InputStre ...