前言

网上关于GaussDB的内容介绍较少,在此分享下我对GaussDB中常用的语句总结,希望能对各位看官提供些微的帮助。
下面不多赘述,直接上干货。


提示:对于GaussDB的常用基本操作。从登录,创建表空间及用户,到对表的基本操作,基本按照逻辑先后顺序,希望能给读者带来良好的阅读体验

一、登录

首先使用高斯数据库用户连接gauss数据库服务器(例如omm用户)

  • 有密码登录
zsql 用户名@密码127.0.0.1:1888 -q
  • 无密码登录(以管理员登录)
zsql / as sysdba -q

二、用户及表空间的操作

1.表空间操作

表空间为用户存储数据的空间

-- 创建表空间
-- /gauss/data/table_data为数据存放目录,256M为初始空间大小。128M为每次扩容空间大小
CREATE TABLESPACE 空间名 EXTENTS 128 DATAFILE '/gauss/data/table_data' SIZE 256M AUTOEXTEND ON NEXT 128M;
-- 删除表空间
-- – AND 删除表空间时同时删除数据文件。 – KEEP 删除表空间时保持数据文件。
DROP TABLESPACE 空间名 AND  DATAFILES;
-- 扩大表空间,data_file为数据存放目录
ALTER TABLESPACE 空间名 ADD DATAFILE 'data_file' SIZE 128M;

2.用户操作

新建用户

-- 创建用户
CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE 表空间名;

赋予数据库权限,下面为赋权用户所有权限的命令

-- 赋予所有权限
grant dba to 用户名;

修改密码

-- 修改密码
ALTER USER 用户名 IDENTIFIED BY 新密码 REPLACE 旧密码;
-- 重置密码(SYS用户)
alter user 用户名 identified by 新密码;

删除用户

-- 删除用户
DROP USER  if exists  用户名 CASCADE;

三、导出导入

下面描述的为较简单的导出命令,先不对高级操作进行赘述

EXP USERS=IM_RMW FILE="/opt/gaussdb/data/test.dmp" FILETYPE=BIN  GRANT=Y PARALLEL=6;

导入命令,与上面的导出命令相对应,请自行替换${}内的参数

  • 全库导入,使用如下命令
IMP FILE="/opt/gaussdb/data/test.dmp" REMAP_SCHEMA=${old_user}:${new_user} REMAP_TABLESPACE=${OLD_TABLESPACE}:${NEW_TABLESPACE} LOG="/home/gaussdba/logs/import_log.txt" FILETYPE=BIN IGNORE=Y;
  • 仅导入单(多)表数据
IMP TABLES=table1,table2 FILE="/opt/gaussdb/data/test.dmp";

四、表操作

表层级的操作,包括表的增删,改名,复制

-- 创建表
 CREATE TABLE 表名(
    NAME VARCHAR(64),
	字段名 字段类型
 );
-- 复制表
create table if not exists 新表名 as select * from 旧表名 where 1=1;

-- 删除表
Drop table 表名;

-- 修改表名:
ALTER TABLE 新表名 RENAME TO 旧表名;

五、表字段操作

包括表字段的增删改

-- 添加字段:
alter table 表名 add 字段名 字段类型;
--示例
alter table TABLE_A add FIELD_A VARCHAR(64);
-- 添加多个字段
ALTER TABLE NDB_LSP_INVENTORY add(
INT_ID VARCHAR(64),
STATEFLAG NUMBER,
TIME_STAMP DATE);

-- 删除字段
ALTER TABLE table_name DROP COLUMN column1;

-- 修改字段类型:
alter table table_name modify column1 VARCHAR(64);

-- 修改表字段名
ALTER TABLE table_name RENAME COLUMN old_column TO new_column;

六、索引操作

-- 添加索引

CREATE INDEX EQUIPMENT_IDX ON EQUIPMENT (NAME);
-- 删除索引
DROP INDEX EQUIPMENT_IDX ON EQUIPMENT;
-- 重建索引
alter index EQUIPMENT_IDX rebuild; 

七、数据库查询性能调优

查看执行计划

-- SQL前添加EXPLAIN查看执行计划
EXPLAIN SELECT * FROM TABLENAME;

多线程查询

-- 多线程查询 /*+ PARALLEL(n) */
SELECT /*+parallel(8)*/ COUNT(*) FROM IM_ENTI_NUMBER WHERE stateflag = 0;

全表扫描
当索引的区分度较低时,使用索引会增加IO损耗,反而会降低查询速度

-- 全表扫描 /*+ full(tableName)*/
SELECT /*+ full(IM_ENTI_NUMBER)*/* FROM IM_ENTI_NUMBER WHERE stateflag = 0;

自定义索引
SQL执行器有时选择的索引并不是最佳的,可以自己指定要使用的索引

-- 自定义使用的索引/*+ index(tableName indexName)*/
SELECT /*+ index(IM_ENTI_NUMBER IDX_ENTI_NUM_MSISDN)*/ COUNT(*) FROM IM_ENTI_NUMBER 
WHERE stateflag = 0 AND MSISDN LIKE '5037%';

联查
自定义驱动表

-- 设置驱动表/*+ leading(e p)*/
-- im_port为大表,以equipment为驱动表,驱动im_port进行联查(表有别名必须用别名)
select /*+ leading(e p)*/ p.uuid,e.IP,p.related_ne,p.frame_no,e.name AS neName,p.name AS portName
    from im_port p
 LEFT JOIN EQUIPMENT e on p.related_ne=e.uuid
 where p.stateflag=0 and e.stateflag=0;

赘述

如有谬误,请不吝指正。
若有建议,请建言献策。

Logo

欢迎加入华为云数据库社区,在这里可以找到志同道合的朋友,共同探索数据库的奥秘

更多推荐