精华内容
下载资源
问答
  • 1. 数据库中最小的物理存储单位:块(block) 数据库最小的物理存储单位是块(9i、10g默认是8k),每个块一般只属于一个表;一行数据插入时会占用块中的一些存储,当块不能再容纳新数据时,则将启用新的块存储数据; 2...

    1. 数据库中最小的物理存储单位:块(block)

    数据库最小的物理存储单位是块(9i、10g默认是8k),每个块一般只属于一个表;一行数据插入时会占用块中的一些存储,当块不能再容纳新数据时,则将启用新的块存储数据;

    2. 表数据在块中的存储以及RowId信息

    表的字段除了设计者设计的字段外,还有个伪列Rowid;RowId是oracle每个表记录的位置信息。当表中插入一行记录时,此记录的块就有一个唯一的物理位置,这个位置信息在查询记录时显示为RowId伪列;

    3. 索引

    普通表中记录的存储顺序是没有规律的,在一个数据量很大的表中,如果不引入其他的手段,每次查找小部分记录都是从第一条扫描到最后一条,这样,系统将慢得不能使用;使用索引可以有效解决问题;

    索引的本质用途是通过它使读取进程在扫描源表时的数据块范围大大减小了,因此性能大幅度提高;

    一般情况下,当检索的记录与所有记录数比较<=4%时,索引是很有效的,当比例更大时,索引反而有可能降低性能,因为即使使用了索引,读取进程还是扫描了大部分的表中的块,如果这样,倒不如不用索引直接扫描源表,因为减少了读取索引的块的开销;

    当索引建好后,oracle优化器在执行sql时会选择是否使用索引,所以设计表者不用担心此索引会影响检索性能;

    创建索引的标准是那一列是否经常在where条件中出现,否则不应该建立,因为,每次表记录的增加、删除以及修改那个字段值时,还要维护索引,增加了开销;

    此节讲的索引叫B_tree索引,在内部存储中类似树状结构,有枝和叶,枝是oracle内部存储的一些连接数据,叶才存储实际的值,
    表中每条记录只要那个列是非NULL值,在索引中都有一个条目(entry)来存储,类似于表在块中一条条记录存储

    4. Bitmap索引介绍

    当表中某列的distinct值比较少时,使用B_tree索引效率就不高了,因为以此列来做where条件过滤的话,结果集很可能超过总记录数的4%,正如前面说过的,超过4%记录使用B_tree索引,效率反而下降。使用Bitmap位图索引可以解决这个问题;
    Bitmap索引使用一个位图来记录数据情况,举例:
    商品表product,有一个字段color存储颜色值,在所有商品中最多就10种不同的颜色,创建的位图图示如下:
     
    其中,Start ROWID是表中的第一条记录的物理地址,end ROWID是表中最后一条记录的物理地址,bitmap是一张位图,存储一连串的0或1;
    列值为blue的bitmap中,每个bit的位置在源表中都能找到某个位置与它一一对应,它们在各自对象中的相对位置一样。bit值为1时,则源表对应位置那个rowid所在的记录的color字段值为‘blue’,为0时,则非‘blue’值;类似的,Green,Red,Yellow都有各自的bitmap;
    试想,当where条件中有过滤条件A  and  B,条件A可以使用B_tree索引,条件B可以使用bitmap索引,那么从A条件中可以得到一个RowId的集合,从B条件也可以得到RowId结合,这样,只要从第一个rowid集中去除第二个rowid集中的值,得到结果集Rowid,我们就可以从源表得到数据了;
    Bitmap使用了压缩技术,节约了存储,并且在一个bitmap上对某个位bit的值是1还是0时速度是非常快的;

    5. 反向索引

    反向索引就是将正常的键值头尾调换后再进行存储,比如原值是“1234”,将会以“4321”形式进行存储,这样做可以高效地打散正常的索引键值在索引叶块中的分布 位置。

    6. 索引分区

    有两种类型的分区索引,全局索引和本地索引,其中本地索引又可以分为本地前缀索引和本地非前缀索引。
    全局索引
    全局索引以整个表的数据为对象建立索引,索引分区中的索引条目既可能是基于相同的键值但是来自不同的分区,也可能是多个不同键值的组合。
    全局索引既允许索引分区的键值和表分区键值相同,也可以不相同。全局索引和表之间没有直接的联系,这一点和本地索引不同。
    全局索引和表没有直接的关联,必须显式的指定maxvalue值。假如表中新加了分区,不会在全局索引中自动增加新的分区,必须手工添加相应的分区。
    使用全局索引,索引键值必须和分区键值相同,这就是所谓的前缀索引。Oracle不支持非前缀的全局分区索引,如果需要建立非前缀分区索引,索引必须建成本地索引。
    本地索引
    本地索引的分区和其对应的表分区数量相等,因此每个表分区都对应着相应的索引分区。使用本地索引,不需要指定分区范围因为索引对于表而言是本地的,当本地索引创建时,Oracle会自动为表中的每个分区创建独立的索引分区。
    创建本地索引不必显式的指定maxvalue值,因为为表新添加表分区时,会自动添加相应的索引分区。

    展开全文
  • 物理存储结构:  数据库文件磁盘上的存储形式:  主数据文件:*.mdf。用来存储数据库的启动信息、存储部分或...数据库的插入、删除、更新等操作都会记录日志文件,因为他们影响到了数据库的记录,会显示影...

    物理存储结构:

      数据库文件在磁盘上的存储形式:

      主数据文件:*.mdf。用来存储数据库的启动信息、存储部分或全部的数据。整个的数据库只能有一个主数据文件

      辅助数据文件:*.ndf。用于存储主数据文件未能存储的剩余数据和一些数据库对象

      日志文件:*.ldf。存储数据库更新的事务日志信息。数据库的插入、删除、更新等操作都会记录在日志文件中,因为他们影响到了数据库的记录,会显示影响条数。而查询不会记录在日志文件中。整个的数据库有且仅有一个日志文件。

      文件组:用来管理磁盘空间。分为:主文件组和辅助文件组。日志不属于任何一个文件组。

      我们可以自己创建文件组:右击想要添加文件组的数据库,选择属性--->文件组:

    逻辑存储结构:

    由数据表,视图,索引等各种不同的数据库对象所组成,他们分别用来存储特定信息并支持特定信息。

     

    转载于:https://www.cnblogs.com/wyhluckdog/p/10318872.html

    展开全文
  • SQLAnywhere[ASA]数据库(以下简称ASA)中的数据库文件,是如何存储普通的表的记录行呢?...数据库文件中小于单个页面的记录行总是存储在单个页里,如果当前页没有足够的空间容纳新的记录行,数据库会将新行写到新的...

    SQLAnywhere[ASA]数据库(以下简称ASA)中的数据库文件,是如何存储普通的表的记录行呢?插入、更新、删除时,记录行的存储会有什么变化? 了解了这些,才能更好的理解如何对ASA数据库进行调优,尤其是物理存储方面。

    1. ASA数据库尽一切可能对数据行连续存储

    数据库文件中小于单个页面的记录行总是存储在单个页里,如果当前页没有足够的空间容纳新的记录行,数据库会将新行写到新的页里。例如,当一个新行需要600字节,但是当前页空闲空间只有500字节,那么,ASA会把这600字节的新行放到新的数据页里。

    为了达到连续存储 的目的,ASA每次分配8个页面,称为一个块(block),如,当它需要一个新页时,它会一次性分配8个页面,把这8个页面放到一个块结构里。会使用一个空闲页位图来查找数据库表空间里头可用的连续页块,执行连续扫描,按组读取64KB,使用位图查找相关页面。这就比每次只读取单个页面要快得多。

     

    2.ASA存储数据的顺序是任意的

    ASA定位到具体的页号,插入数据的顺序是按照它接收时的顺序来的。它为每一个数据行找到一个具体的页,但是具体是哪一个页,并不一定严格按照接收时的顺序递增。e.g. 可能某一行太大,启动一个新页来存储,紧接着,一行比较小,可能会存储到以前有剩余空间的旧页里头,因而顺序并不严格一致。

    表中的记录行并没有进行排序,要取得顺序结果,要依赖于order by子句,这与所有的RDBMS是一致的。

     

    3. ASA不会为NULL空值列预留空间

    缺省情况下,无论ASA何时插入一行,它只会保留插入时使用的那么大的空间。它不会预留更多的空间便于将来的更新。

    改变此行为的唯一办法是在CREATE TABLE时使用PCTFREE子句.如果没有设定此值,将会采用默认值。该默认值存储到系统表:ISYSTAB里。

    查看一个表的碎片程度,CALL sa_table_fragmentation( ) 会得到所有的表的情况。

     

    4. 插入完成以后,行ID不会发生变化。

    每一个数据行都有唯一的行ID,一旦插入完成,就不会发生变化。在更新的时候,如果数据行所在页没有足够的空闲空间,则会发生行链接,一个记录行会发生跨页存储,导致性能上的下降。

     

    5. 数据库文件永远不会自动收缩

    数据库会重用以前的空间,ASA会记录所有页的空闲空间,插入时,会搜索所有现存页的空闲空间记录,如果有足够的空间,即把记录插入到目标页,找不到时,会启动一个新页,完成插入操作。

    在所有的数据库操作中,在执行了多次删除记录的操作,但是没有新的足够小的记录来重用这些删除操作后产生的新的空闲空间,这就是表碎片产生的一个重要原因,消除表碎片,可以提高扫描表记录的性能,使用语句:

     

    REORGANIZE TABLE

    即可达到目的。

     

    对整个数据库的unload, reload则会重新整理整个数据库的碎片,也会有一次性能的提升。

    转载于:https://www.cnblogs.com/xujie2013/p/3430782.html

    展开全文
  • 1.1.2.表数据在中的存储以及RowId信息3 2.数据的物理存储结构自然数序,与btree存储结构3 2.1.普通表中记录的存储顺序随机顺序存储3 2.2.数据库以B树格式储存, 4 3.分区4 4.行记录的物理结构以及R...

    Atitit.数据库表的物理存储结构原理与架构设计与实践

     

     

    1OracleDB2数据库的存储模型如图: 1

    1.1. 2. 表数据在块中的存储以及RowId信息3

    2数据表的物理存储结构 自然数序,与btree存储结构3

    2.1. 普通表中记录的存储顺序随机顺序存储3

    2.2. 数据库以B树格式储存, 4

    3分区4

    4行记录的物理结构 以及 RowId4

    5Oracle中具有如下几类数据结构:5

    6参考7

     

     

     

    1. OracleDB2数据库的存储模型如图:

     

     

     

     

     

    Oracle和DB2数据库的存储模型如图:

    可以看出,数据库中的数据都存储在表空间中。表空间即是管理将逻辑数据库设计映射到操作系统物理存储中的一个数据库对象,用于指明数据的物理位置。关于表空间,以后再讨论。

     

     

    Oracle数据库磁盘存储的逻辑结构为:一个数据库(Database)对应多个表空间(Tablespace),一个表空间对应多个段(Segment),一个段对应多个区(Extent),一个区对应多个数据块(Data Block),真正的数据就保存在数据块中

     

    对应多个数据块(Data Block),真正的数据就保存在数据块中。这里有以下几点需要说明:

    1.Oracle中一个数据块的大小默认是2KB(支持2KB,4KB,8KB,16KB,32KB),而DB2中则默认是4KB(支持4KB,8KB,16KB,32KB);

    2.Oracle中有段(Segment)的概念,而DB2中没有这一概念,表空间直接是各个容器(数据文件)中的区(Extent)组成,不过也还是有一个很弱化的Extent组概念。下面提到的关于Segment的内容则全部是针对Oracle的;

    3.Oracle中的数据块称为Oracle Block,而DB2中则直接称为Data Page(数据页)。

    4.Oracle中的Extent称为区,而DB2中则称为扩展数据块。为方便阅读,本文中统称为区。

     

     

    二、 段(segment)(这块儿没有详细记录)

            段用于存储表空间中某一种特定的、具有独立存储结构的数据库对象的数据,它有一个或多个连续的区组成。当创建表、索引、簇等对象时,oracle就会为这些对象分配存储空间(即段),以便存储它们的数据。按照段中所存储的数据的特征、用途不同,可以分为以下几种:

    段类型

    名称

    段类型

    名称

    Index partition

    索引分区段

    Deferred rollback

    延迟回退段

    Table partition

    表分区段

    Undo

    撤销段(还原段)

    Table

    表段(数据段)

    Temporary

    临时段

    Cluster

    簇段

    Cache

    高速缓存段

    Index

    索引段

    Lob

    二进制大对象段

    Rollback

    回退段

    Lobindex

    二进制大对象索引段

     

     

    1.1. 2. 表数据在块中的存储以及RowId信息

    表的字段除了设计者设计的字段外,还有个伪列Rowid;RowId是oracle每个表记录的位置信息。当表中插入一行记录时,此记录的块就有一个唯一的物理位置,这个位置信息在查询记录时显示为RowId伪列;

     

    作者:: 绰号:老哇的爪子 ( 全名::Attilax akbar al rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

     

    2. 数据表的物理存储结构 自然数序,与btree存储结构

     

    3. 索引

    2.1. 普通表中记录的存储顺序随机顺序存储

    ,在一个数据量很大的表中,如果不引入其他的手段,每次查找小部分记录都是从第一条扫描到最后一条,这样,系统将慢得不能使用;使用索引可以有效解决问题;

    索引的本质用途是通过它使读取进程在扫描源表时的数据块范围大大减小了,因此性能大幅度提高;

     

     

    三、索引

    2.2. 数据库以B树格式储存,

    只解决了按照主键查找数据的问题。如果想查找其他字段,就需要建立索引(index)。

    所谓索引,就是以某个字段为关键字的B树文件。假定有一张雇员表,包含了员工号(主键)和姓名两个字段。可以对姓名建立索引文件,该文件以B树格式对姓名进行储存,每个姓名后面是其在数据库中的位置(即第几条记录)。查找姓名的时候,先从索引中找到对应第几条记录,然后再从表格中读取。

    这种索引查找方法,叫做索引顺序存取方法Indexed Sequential Access Method),缩写为ISAM。它已经有多种实现(比如C-ISAM库和D-ISAM库),只要使用这些代码库,就能自己写一个最简单的数据库。

    问题,数据到底是按照先来后到存储,还是按照主键的btree。。按道理是无规律,否则没增加一个字段都要重新排序文件??Yeyou可能prikey自增,会自动排在后面》》??

     

     

    3. 分区

    4. 行记录的物理结构 以及 RowId

     

    RowId可以用hash记录得到

     

    D:\workspace 空格\AtiPlatf\info_schema\columns\shopedb\底单申请表

    每一个文件就是一个记录。。一下是此文本json格式的记录

     

      {

        "TABLE_NAME": "CHARACTER_SETS",

        "CHARACTER_OCTET_LENGTH": 96,

        "TABLE_CATALOG": "def",

        "COLUMN_COMMENT": "",

        "COLUMN_DEFAULT": "",

        "IS_NULLABLE": "NO",

        "COLUMN_TYPE": "varchar(32)",

        "COLLATION_NAME": "utf8_general_ci",

        "CHARACTER_SET_NAME": "utf8",

        "CHARACTER_MAXIMUM_LENGTH": 32,

        "TABLE_SCHEMA": "information_schema",

        "COLUMN_NAME": "img_col",

        "EXTRA": "",

        "ORDINAL_POSITION": 2,

        "NUMERIC_PRECISION": null,

        "PRIVILEGES": "select",

        "NUMERIC_SCALE": null,

        "COLUMN_KEY": "",

        "DATA_TYPE": "img"

      }

    5. Oracle中具有如下几类数据结构:

    数据文件:存放数据库中的数据。表和索引是数据库用来存储数据的逻辑结构,数据文件即用来存放表和索引数据。

    日志文件:存放数据库操作日志的文件。整个数据库的运行过程被日志化,日志集中存放在日志文件中,用于数据库系统的数据恢复操作。

    控制文件:存放数据库物理结构和运行状态信息的文件,存储了数据库名、数据文件和日志文件名、数据库日志归档状态和系统备份状态等信息。

    Oracle数据库由下列逻辑结构组成:

    系统表空间,用来集中存储Oracle的系统数据。

    临时表空间,用于数据库事务处理过程中的临时数据处理。

    用户表空间,用于存储用户的数据库对象和最终数据。

    还原表空间(回滚表空间),用于存储事务操作过程的数据前映像,以应对用户可能的回退操作。

     

     

    三、 区(extent

            区是由物理上连续存放的块所组成的。区 是oracle存储分配的最小单位。一个或多个块组成区,一个或多个区组成段。一个区只能属于一个数据文件。

            当在数据库中创建带有实际存储结构的方案对象时(如表、索引),oracle将为方案对象分配若干个区(视该方案的初始大小而定),以便组成一个对应的段,来为该方案对象提供初始的存储空间。当段中已分配的区都写满,oracle就要在该方案对象所在的表空间中为该段分配下一个新的空白区,以便容纳更多的数据。 

    四、 块(block

            块是最小的数据管理单位,即oracle的所有存储的i/o操作都是以块为单位的。相对应的,操作系统执行i/o操作的最小单位是操作系统块。块得大小是操作系统块得大小的整数倍。

    ​    ​    块得大小是一个表空间的属性。SYSTEMSYSAUX表空间具有相同的、标准的块大小,这个大小是在创建数据库时(会同时创建这两个表空间)由DB_BLOCK_SIZE初始化参数指定的,但在创建数据库之后这个参数值不能改变。

     

     

    一、 控制文件

            控制文件是一个很小的(通常是数据库中最小的)文件,大小一般在1~5M左右,为二进制文件。但它是数据库中的关键性文件,它对数据库的成功启动和正常运行都是至关重要的,因为它存储了在其他地方无法获得的关键信息,这些信息包括:

            1、数据库的名称

            2、数据文件和重做日志文件的名称、位置、联机\脱机状态和大小

            3、发生磁盘故障或用户错误时,用于恢复数据库的信息(日志序列号,检查点)

            在数据库的运行过程中,每当出现数据库检查点或修改数据库的结构之后,oracle(只能有oracle本身)就会修改控制文件的内容。DBA可以通过OEM工具修改控制文件中的部分内容,但DBA和用户都不应该认为的修改控制文件中的内容,否则会破坏控制文件。

    三、 重做日志文件

            当用户对数据库进行修改的时候,实际上是先修改内存中的数据,过一段时间后,再集中将被村中的修改结果成批的写入到上面的数据文件中。oracle采取这样的做法,主要是出于性能上的考虑,因为针对数据操作而言,内存的速度比硬盘的速度要快成千上万倍。

            oracle利用(联机)重做日志文件随时保存修改结果,即oracle随时将内存中的修改结果保存到重做日志文件中。随时表示在将修改结果写入到数据文件之前,可能已经分几次写入到重做日志文件。因此,即使发生故障导致数据库崩溃,oracle也可以利用重做日志文件中的信息来恢复丢失的数据。只要某项操作的重做信息没有丢失,就可以利用这些重做信息来重现该操作。

            oracle是以循环方式来使用重做日志文件的,所以每个数据库至少需要两个重做日志文件。当第一个重做日志文件被写满后,后台进程LGWR(日志写进程)开始写入第二个重做日志文件;当第二个重做日志文件被写满后,又始写入第二个重做日志文件,以此类推。

     

     

     

     

    6. 参考

    自己实现一个最简单的数据库_电脑教程学习网.htm

    数据库的最简单实现 - 阮一峰的网络日志.htm

    转载于:https://www.cnblogs.com/attilax/p/5963560.html

    展开全文
  • 但是, 我们怎么找到具体数据库文件的物理地址呢? 首先, 我们要先查找到表的oid, 然后再去数据库存储数据的目录; select oid,relfilenode from pg_class where relname='product'; 图一 安装pg的时候, 会让你指定...
  • oracle数据库的物理存储结构

    千次阅读 2010-11-10 18:52:00
    数据文件,也叫无理数据文件(datafile),包含了所有的数据库文件,数据库的逻辑结构的数据(表、视图等)都实在的存储在数据库的数据库文件数据文件包括: ·表数据 ·索引数据 ·数据字典定义 ·回滚事物所需...
  • DM 数据库数据在逻辑上存储在表空间,而在物理上存储在表空间所包含的物理文件(即数据文件)。DM 数据库的物理存储结构由多种物理文件组成,主要由数据文件、控制文件、重做日志文件、归档日志文件、逻辑日志...
  • Oracle的数据在逻辑上存储在表空间,物理上存储于表空间所包含的物理文件数据文件)。 Oracle数据库的物理存储结构由多种物理文件组成,主要有数据文件、控制文件、重做日志文件、归档日志文件、参数文件、...
  • Oracle数据库结构之物理存储结构 1、物理存储结构 1.1数据文件 数据文件用于存放所有的数据库数据。将数据放在多个数据文件,再将数据文件分放在不同硬盘,可以提高存取速度。 1.2记录文件 记录文件也...
  • 项指存储在一个页面里独立数据值。在一个表里,一个项是一个行;在一个索引里,一个项是一条索引记录。 每个表和索引都以固定尺寸(通常是 8K ,但也可以在编译时选择其它尺寸)页面数组存储。在表里,所有...
  • 从逻辑上来说,ORACLE是将数据存储在表空间中的表里面,从物理上来说,ORACLE是将数据存储在磁盘的数据文件里。具体的结构如下图所示:        一个ORACLE数据库可以包含多个TABLESAPCE;一个表空间物理上...
  • 从系统角度看,数据库系统内部通常采用三级模式结构外模式(子模式或用户模式):介于模式和应用之间,是特定数据库用户...模式(逻辑模式):模式是数据库中全体数据的总体逻辑结构描述,是用户公共数据视图 ...
  • 数据库中的数据按照一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并为各种用户共享。 数据库中敏感数据的销毁有以下三个层次: 1)物理硬件的销毁 2)数据文件的销毁 3)数据库...
  • 虽然数据库系统不用管理高速缓冲存储器,但设计数据库系统的算法和数据结构时,通常会考虑到高速缓冲存储器的影响 主存储器(main memory) 用于存放可处理的数据和机器指令的存储介质 如果电源关闭,主存储器中的...
  • 很多开发者最开始时其实都对数据库有一个比较模糊认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂多,数据库领域有两个词非常容易混淆,也就是数据库和实例: 数据库物理操作文件系统或其他...
  • 映射有一个或者多个Range组成,每一个Range对应一个把数据存储在RocksDB(LevelDB一个变种,Facebook贡献)上K/V数据库,并且复制到三个或者更多蟑螂服务器上,Range定义为有开始和结束键值区间。Range可以...
  • 通常存储在数据存储中的数据通常分为以下两个部分: 业务元数据 技术元数据 操作元数据 业务元数据 业务元数据包括以下内容: 商业词汇和术语 数据元素的业务定义 规则,指标KPI和其他更高级别的数据抽象 ...
  • FlockDB是一个存储数据的数据库,但是它并没有优化遍历图操作。它优化操作包括:超大规模邻接矩阵查询,快速读写和可分页查询。FlockDB将图存储为一个边集合,每条边用两个代表顶点64位整数表示。对于一个...
  • 数据库中的数据模型

    2016-10-10 19:12:47
    数据模型分为两类,一类是概念模型,是对现实世界抽象到概念级别,通常用对象-关系模型(E-R)表示比如银行各个不同类别规定和之间联系,第二类是逻辑模型和物理模型,其中逻辑模型通常是指对概念模型进一步具体...
  • 所以实际数据库物理设计需要综合平衡考虑后决定要建立什么样索引。 设计2条SQL语句,这2条语句查询需求相同,但1条使用索引,另1条不使用索引。将这2条SQL语句同时提交给DBMS,比较它们执行效果、执行速度、...
  • 数据库设计之物理结构设计

    万次阅读 2018-07-03 10:58:59
    确定数据库的物理结构,关系数据库中主要指存取方法和存储结构。 对物理结构进行评价,评价的重点是时间和空间效率。 如果评价结构满足原设计要求,则可进入到物理实施阶段,否则,就需要重...
  • 数据库 - 物理设计

    万次阅读 2015-05-08 10:39:29
    数据库的物理设计数据库...确定数据库的物理结构,关系数据库中主要指存取方法和存储结构 对物理结构进行评价,评价的重点是时间和空间效率 如果评价结果满足原设计要求,则可进入到物理实施阶段,否则,就需要
  • Oracle数据库中的每个表空间都包含一个或多个名为datafiles的文件,这些文件是符合运行Oracle的操作系统的物理结构。 数据库的数据共同存储在构成数据库的每个表空间的数据文件中。例如,最简单的Oracle数据库将具有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,729
精华内容 1,491
关键字:

数据库中的物理数据存储在