先从数据结构的角度来答
题主应该知道B-树和B树最重要的一个区别就是B树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域
这就决定了B树更适合用来存储外部数据,也就是所谓的磁盘数据
从Mysql(Inoodb)的角度来看,B树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上
那么Mysql如何衡量查询效率呢?磁盘IO次数,B-树(B类树)的特定就是每层节点数目非常多,层数很少,目的就是为了就少磁盘IO次数,当查询数据的时候,最好的情况就是很快找到目标索引,然后读取数据,使用B树就能很好的完成这个目的,但是B-树的每个节点都有data域(指针),这无疑增大了节点大小,说白了增加了磁盘IO次数(磁盘IO一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,IO次数增多,一次IO多耗时啊!),而B树除了叶子节点其它节点并不存储数据,节点小,磁盘IO次数就少
这是优点之一
另一个优点是什么,B树所有的Data域在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节点用指针串起来
这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦
至于MongoDB为什么使用B-树而不是B树,可以从它的设计角度来考虑,它并不是传统的关系性数据库,而是以Json格式作为存储的nosql,目的就是高性能,高可用,易扩展
首先它摆脱了关系模型,上面所述的优点2需求就没那么强烈了,其次Mysql由于使用B树,数据都在叶节点上,每次查询都需要访问到叶节点,而MongoDB使用B-树,所有节点都有Data域,只要找到指定索引就可以进行访问,无疑单次查询平均快于Mysql(但侧面来看Mysql至少平均查询耗时差不多)
总体来说,Mysql选用B树和MongoDB选用B-树还是以自己的需求来选择的
数据库类型可分为层次型、网状型和关系型。
层次型数据库是把数据根据层次构造(树结构)的方法呈现;网状型数据库是采用网状原理和方法,以网状数据模型为基础建立的数据库;关系型数据库是指采用了关系模型来组织数据的数据库。
数据库的作用
1、实现数据共享:数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。
2、减少数据的冗余度:同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。
3、保持数据的独立性:数据的独立性包括逻辑独立性(数据库中数据库的逻辑结构和应用程序相互独立)和物理独立性(数据物理结构的变化不影响数据的逻辑结构)。
4、数据实现集中控制:文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
不知道你的数据库是什么,如果是oracle的话,你用start with connect by试试。我不太确定能不能直接出来你要的效果。如果出不来,那么用start with connect by+union all+条件判断(分别写每一个level=1的情况)应该可以,不过如果level=1有很多个,那么就麻烦了。
还有一种办法是利用字符串排序。比如1-1-1-2,1-2-1-2,1-1-1-3,那么排完序之后应该是1-1-1-2,1-1-1-3,1-2-1-2至于这个参数的出来方法就要去凑了。因为我担心还有例如1-1-1-2-1这样的,如果存在这样的,那么按照你的要求排序应该是
1-1-1-2,1-1-1-2-1,1-1-1-3,1-2-1-2,可是如果按照数字排序那么1-1-1-2-1肯定在最后,所以用字符排序可能才能达到你的要求。(还是用start with connect by)
比如这里最后的编码为
Level层数 父件代号 子件代号 子件顺序 编码
1 root C 1 1-1
1 root D 2 2-1
1 root F 3 3-1
2 C A 1 1-1-2-1
2 C B 2 1-1-2-2
2 D E 1 2-1-2-1
我这里没有环境,没办法测试,所有的内容均为猜想,仅供参考。
先根据父编码排序,父编码相同的情况下再根据子编码排序
SELECT id,name
FROM [Table1]
ORDER BY ISNULL(sjbm,0)+'',id
不确定你的sjbm是什么类型的,假如是int型的话,就要判断为NULL值的情况,对你给的数据分析,顶级数据的sjbm值可能是空的
产生的结果应该是
1 a
2 b 1
4 d 1
3 c 2
5 e 4
6 f 4
但是这样只能实现二级项排序,对于你现有的数据,应该是3级项,可以实现,但如果是N级项的话,就只能在存储过程里实现了
以下是3级项排序的实现方法,其中的排序值就是各项Id,以“”分隔:
--1级项,sjbm为空,排序值为(x)
SELECT id,name ,id orderId
FROM [Table1]
WHERE sjbm IS NULL
union all
--2级项,sjbm与1级项的id相等,排序值为(xy)
SELECT id,name ,[lv1]id + '' + [lv2]id
FROM [Table1] AS [lv2]
INNER JOIN
(
SELECT id
FROM [Table1]
WHERE sjbm IS NULL
) AS [lv1] ON [lv2]sjbm = [lv1]id
UNION ALL
--3级项,sjbm与2级项的id相等,排序值为(xyz)
SELECT id,name ,[lv2]sjbm + '' + [lv2]id + '' + [lv3]id
FROM [Table1] AS [lv3]
INNER JOIN
(
SELECT id,name,sjbm
FROM [Table1]
WHERE sjbm IN
(
SELECT id
FROM [Table1]
WHERE sjbm IS NULL
) AS [lv2] ON [lv3]sjbm=[lv2]id
ORDER BY orderId
如果显示OrderId的话,应该如下结果
1 a 1
2 b 12
3 c 123
4 d 14
5 e 145
6 f 146
下列软件不属于数据库管理系统的是(UNIX)。
UNIX
ORACLE
FOXPRO
SQLSERVER
DBS是采用了数据库技术的计算机系统。DBS是一个集合体,包含数据库、计算机硬件、软件和(数据库管理员)。
系统分析员
程序员
数据库管理员
*** 作员
对某个具体的数据库应用来说,下列说法中正确的是(以上三个都不是唯一的)。
E-R图是唯一的
数据模型是唯一的
数据库文件是唯一的
以上三个都不是唯一的
以下不属于数据库系统组成的是(文件系统)。
硬件系统
数据库管理系统及相关软件
数据库管理员(DBA)
文件系统
下列四项中说法不正确的是(数据库避免了一切数据的重复)。
数据库减少了数据冗余
数据库中的数据可以共享
数据库避免了一切数据的重复
数据库具有较高的数据独立性
与文件管理系统相比,(访问速度快)不是数据库系统的优点。
数据结构化(数据结构化是数据库与文件系统的根本区别。)
访问速度快(文件管理系统速度要比把文件内容放在数据库中快)
数据独立性
冗余度可控
下列四项中,不属于关系数据库特点的是(数据冗余小)。
数据冗余小
数据独立性高
数据共享性好
多用户访问
根据关系数据基于的数据模型-关系模型的特征判断下列正确的一项:(以二维表格结构来保存数据,在关系表中不允许有重复行存在)。
只存在一对多的实体关系,以图形方式来表示
以二维表格结构来保存数据,在关系表中不允许有重复行存在
能体现一对多、多对多的关系,但不能体现一对一的关系
关系模型数据库是数据库发展的最初阶段
用树型结构表示实体间联系的模型是(层次模型)。
关系模型
网状模型
层次模型
以上三个都是
(层次模型:用树型结构表示实体间联系的数据模型)
关系数据库用(二维表)来表示实体之间的联系。
树结构
网结构
二维表
线性表
(关系模型:使用最广泛的一种数据库模型。方法:用若干个二维表来表示实体以及实体之间的联系。)
以上就是关于怎么将数据库中存的树转化为树形列表(数据库如何存储树形结构)全部的内容,包括:怎么将数据库中存的树转化为树形列表(数据库如何存储树形结构)、数据库类型有哪几种、数据库树形结构数据的查询结果排序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)