一、GaussDB的层级关系 ,关于schemas的定位,到底是个什么,其实就可以理解为一个文件夹
数据库服务器 --> databases --> schemas --> tables
schema类似于文件夹,一个数据库database里面可以有多个文件夹,每个文件夹里面可以都有一个表叫abc,就不会冲突。如果没有这个schema这种文件夹,那么相当于所有的表都直接在数据库的根目录下,那么就不能有两个名称一样的表了。所以这个schema就是类似于文件夹,A文件夹里面可以有个表叫abc,B文件夹里面也可以有个表叫abc
schema也类似于namespace,就跟C盘D盘这种盘符一样,主要是为了隔离,进行精细化管理,而且相互隔离的空间内,可以有重复的资源,比如重复的表名称
来源应该是这个:
用DBeaver连接上GaussDB,真实效果如图,可清楚判断层级关系
常用概念_云数据库 GaussDB_华为云GaussDB的最小管理单元是实例,一个实例代表了一个独立运行的数据库。用户可以在控制台创建和管理GaussDB实例。实例的状态、规格、存储类型和版本,请参考实例说明。GaussDB目前支持V2.0-8.201版本。GaussDB支持分布式版和集中式版实例。分布式版能够支撑较大的数据量,且提供了横向扩展的能力,可以通过扩容的方式提高实例的https://support.huaweicloud.com/productdesc-gaussdb/gaussdb_01_006.html
GaussDB社区_华为云GaussDB_开发者社区_华为云华为云数据库GaussDB社区,带您免费体验GaussDB数据库服务https://bbs.huaweicloud.com/contents/sql/gaussdb-community.html
二、 关于表空间
表空间对应文件系统的一个目录,
关键字是TABLESPACE,一般在指定的表空间下创建表。
三、 GaussDB常用的一些sql语句
SELECT VERSION() # 查看数据库系统版本
SELECT CURRENT_USER # 查看当前用户
SELECT USER # 查看当前用户
SELECT MAX(ID) FROM <tablename> # 查看表的最大ID
SELECT COUNT(1) FROM <tablename> # 查看表的行数
select * from pg_database # 查询系统表
SELECT TABLESPACE_NAME, TABLE_NAME, NUM_ROWS FROM adm_tables WHERE OWNER = '<owner_name>' ORDER BY NUM_ROWS DESC LIMIT 10 # 统计行数最高的10个表
count 和 num_rows都是查看表的行数,前者更精确,但是需要全表扫描,比较慢,对数据库负担比较重;后者是从adm_tables系统表中查看元数据,结果可能不准确,是因为是analyze定期更新的,但是不扫描全表,速度快,数据库负担小。
SELECT * FROM adm_tablespaces # 查看系统表空间,会显示所有表空间的详细信息,包括名称、存储位置。
参考文档:ADM_TABLESPACES_云数据库 GaussDB_华为云ADM_TABLESPACES视图显示有关可用的表空间的信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。ORA数据库与GaussDB数据库逻辑结构特性不一致。https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-1162.html
SELECT TABLE_NAME, TABLESPACE_NAME FRON ADM_TABLES WHERE OWNER = '<ownername>' AND TABLE_NAME LIKE '<tablename>' # 查询一个库中的表的表名称和表空间的对应关系
SELECT TABLESPACE_NAME, TOTAL_SIZE/1024/1024/1024 AS "TOTAL(G)", USED_SIZE/1024/1024/1024 AS "USED(G)", ROUND(USERD_SIZE * 100 / TOTAL_SIZE, 2) USED_PERCENT FROM ADM_TABLESPACES WHERE TABLESPACE_NAME LIKE '<tablespacename>' ORDER BY 2 DESC; # 查询指定表空间的使用情况
如何查看表空间对应的磁盘目录?
SELECT spcname, pg_tablespace_location FROM pg_tablespace; # 这一条如果没有查到结果
SELECT * FROM pg_tablespace # 就用这个查询,select * from DBA_DATA_FILES WHERE TABLESPACE_NAME LIKE 'xxx%'
SELECT * FROM ADM_DATA_FILES WHERE TABLESPACE_NAME LIKE 'xxx%' 查看表空间对应的磁盘目录
四、 关于分区表和普通表
普通表,所有数据都存在一个物理文件中
分区表,数据被分割成多个部分,每个部分存储在不同的物理文件或子表中,这些部分称为分区
五、关于调用存储过程
语法格式:
CALL [ schema.|package. ] { func_name | procedure_name } ( param_expr );
比如:
CALL schema_name.collect_index_stats('用户',‘索引名’,15);
调用一个schema下面的存储过程,这个存储过程的字面意思是收集索引信息。
这个存储过程的概念,其实就是类似于一个加强版的函数,函数一般返回值是一个,存储过程的返回值一般是一套。
参考文档:
成长地图_云数据库 GaussDB_华为云https://support.huaweicloud.com/gaussdb/index.html
六、什么是数据库的段segment
segment是表空间管理的逻辑单位,每个索引占两个segment,分别用于管理叶子节点和非叶子节点。
七、“||”操作符在SQL中用于连接两个字符串,常用||'%',给前面的数字加个百分号%
八、 参考资料:
官网地址:openGauss官方网站 | openGauss主页 | openGauss社区官网
官网上的教学视频地址:
轻松上手openGauss之SQL语言(上)_哔哩哔哩_bilibili
图片来源(上图): README.md · openGauss/openGauss-server - Gitee.com
图片来源(上图):GaussDB SQL查询语句执行过程解析
图片来源(上图):GaussDB SQL查询语句执行过程解析
资料来源(上图):GaussDB SQL查询语句执行过程解析
资料来源(上图):GaussDB SQL查询语句执行过程解析
以下内容为AI生成:
1. **一个数据库服务器可以包含多个数据库(Database)**:
- 数据库服务器是指运行数据库管理系统的计算机或服务实例。它可以托管多个独立的数据库,每个数据库都是一个逻辑上独立的数据集合,拥有自己的配置、用户权限和数据文件。
2. **每个数据库可以包含多个模式(Schema)**:
- 模式是数据库内的逻辑容器,用于组织和隔离不同的数据对象(如表、视图、索引等)。通过使用不同的 schema,可以在同一个数据库中为不同用户或应用程序创建具有相同名称的对象而不发生冲突。
3. **每个模式可以包含多个表(Table)以及其他数据库对象**:
- 表是最常见的数据库对象之一,用于存储实际的数据记录。除了表之外,schema 还可以包含视图、索引、触发器、函数等其他类型的数据库对象。
### 简化的层次结构示意图
```
数据库服务器
├── 数据库 (Database) 1
│ ├── 模式 (Schema) A
│ │ ├── 表 Table 1
│ │ ├── 表 Table 2
│ │ └── ...
│ ├── 模式 (Schema) B
│ │ ├── 表 Table 3
│ │ └── ...
│ └── ...
├── 数据库 (Database) 2
│ ├── 模式 (Schema) C
│ │ ├── 表 Table 4
│ │ └── ...
│ └── ...
└── ...
```
### 示例 SQL 操作
#### 创建数据库
```sql
CREATE DATABASE db1;
CREATE DATABASE db2;
```
#### 在特定数据库中创建 schema
```sql
-- 切换到 db1
\c db1;
-- 在 db1 中创建两个 schema
CREATE SCHEMA finance;
CREATE SCHEMA hr;
```
#### 在 schema 中创建表
```sql
-- 在 finance schema 中创建一张表
CREATE TABLE finance.expenses (
id SERIAL PRIMARY KEY,
amount NUMERIC NOT NULL,
description TEXT
);
-- 在 hr schema 中创建另一张表
CREATE TABLE hr.employees (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
position TEXT
);
```
### 总结
- **数据库服务器**:负责管理和提供对多个数据库的访问。
- **数据库**:逻辑上独立的数据集合,每个数据库都有自己的配置和安全设置。
- **schema**:数据库内部的逻辑分隔,帮助组织和隔离数据对象。
- **表和其他对象**:存储实际数据或定义数据操作规则的具体实体。