KingbaseES 四维操控:索引、视图、用户与事务的实战密码
目录
引言
第七部分:创建和管理索引
【创建索引】
【修改索引】
【查看索引】
【重建索引】
【删除索引】
第八部分:创建和管理视图
【创建视图】
【查询视图定义】
【查询视图】
【修改视图】
【删除视图】
第九部分:创建和管理用户
【创建用户】
【修改用户】
【查看用户】
【授予权限】
【撤销权限】
【删除用户】
第十部分:启动和管理事务
【事务控制命令】
【事务示例】
结尾
正文开始——
引言
KingbaseES(简称KES)是面向全行业、全客户关键应用的企业级大型通用融合数据库产品,适用于事务处理类应用、数据分析类应用、海量时序数据采集检索类应用、要求苛刻的互联网应用等场景;可用作管理信息系统、业务及生产系统、决策支持系统、多维数据分析系统、运行日志管理系统、全文检索系统、地理信息系统、时序数据处理相关系统的承载数据库。 KES采用融合数据库架构,通过多语法体系一体化架构实现一套软件兼容Oracle、MySQL、SQL Server、PostgreSQL等多个异构数据库的语法; 采用多模数据一体化存储,支持对关系模型、文档模型、全文本、GIS数据、时序等数据的统一存储、混合访问、模型间转换; 采用集中分布一体化架构,满足不同级别的可用性,为客户提供不同级别的可用性、性能扩展、成本需求,确保业务连续,最大化投资价值。
下面是本系列的前两节内容,从零开始详细介绍如何安装KingbaseES数据库以及如何实操KingbaseES数据库:
深入体验—Windows从零到一安装KingbaseES数据库
不再止于观望!实操金仓数据库初始化与管理全攻略
本文将详细介绍几项日常运维与开发中最常用的操作:如何创建与管理索引以提升查询性能、如何设计与维护视图以提高代码复用、如何创建与管理用户与权限以保障数据安全、以及如何正确启动与管理事务以确保数据一致性。通过实用的命令与注意事项,帮助开发者与DBA在实际环境中快速上手并避免常见陷阱。
第七部分:创建和管理索引
索引是一种与表相关的数据库对象,可以创建在表的一列或多列上。通过使用索引,可以让数据库不必扫描整个表,直接定位到符合条件的数据行,提高数据检索的速度。
但是,索引并不是越多越好,当表中插入、更新或删除数据时,涉及的索引也需要更新,这会造成性能开销。因此,需要对索引进行合理的创建和管理。
【创建索引】
KingbaseES中,使用 CREATE INDEX
语句来创建索引。
- 示例
使用 CREATE INDEX
语句创建索引:
CREATE INDEX idx_employee ON orders(employee_id);
- 备注
CREATE INDEX创建的是非唯一索引。
使用 CREATE INDEX
语句创建组合索引:
CREATE INDEX idx_orders ON orders(order_id, order_date);
组合索引,也成为连接索引,是在表中的多个列上的索引。组合索引中的列应该以在检索数据的查询中效率最高的顺序出现,但在表定义中的顺序不需要与组合索引列顺序一致。
使用CREATE UNIQUE INDEX语句创建唯一索引:
CREATE UNIQUE INDEX uid_order ON orders(order_id);
使用CREATE UNIQUE INDEX语句创建唯一组合索引:
CREATE UNIQUE INDEX uid_orders ON orders(order_id, order_date);
【修改索引】
使用ALTER INDEX语句可以修改索引的相关属性信息。
- 示例
使用ALTER INDEX语句重命名索引名:
ALTER INDEX idx_employee RENAME TO idx_employeeid;
使用ALTER INDEX语句设置索引选项:
ALTER INDEX idx_employeeid SET(FILLFACTOR = 60);
- 提示
FILLFACTOR为索引的填充因子,用于指定在创建或重建索引时新页的填充程度,其值是介于1~100之间的整数。
【查看索引】
可通过下述两种方式查询数据库中的索引信息:
使用SELECT语句查询sys_indexes视图查看数据库中的所有索引:
SELECT * FROM sys_indexes;
使用ksql工具的 \di
命令查看数据库中的所有索引:
\di
【重建索引】
重建索引可以确保索引存储参数的修改完全生效,并且还能用来恢复无用或被损坏的索引。
使用REINDEX INDEX语句重建索引:
REINDEX INDEX idx_employee;
使用REINDEX TABLE语句重建表上所有索引:
REINDEX TABLE orders;
【删除索引】
使用 DROP INDEX
语句删除索引:
DROP INDEX idx_employeeid;
使用 DROP INDEX
语句级联删除索引:
DROP INDEX idx_orders CASCADE;
- 提示
级联删除索引是指删除索引时自动删除依赖于该索引的对象。
第八部分:创建和管理视图
KingbaseES数据库中视图是一个虚拟表,不记录实际数据,只保存定义中的查询语句,当查询视图时,数据库内部执行该查询语句来获取数据。
【创建视图】
使用 CREATE VIEW
语句创建视图:
CREATE [options] VIEW name [options] AS query [options] ;
使用CREATE OR REPLACE VIEW语句创建视图:
CREATE OR REPLACE VIEW orders_info AS SELECT order_id, customer_name FROM orders;
- 提示
使用 CREATE OR REPLACE VIEW
语句可以更新视图定义。
【查询视图定义】
查询sys_views视图获取自定义视图定义:
SELECT * FROM sys_views WHERE viewname = 'orders_info';
使用ksql命令查询视图定义:
\sv orders_info
【查询视图】
使用SELECT语句查询视图:
SELECT * FROM orders_info;
【修改视图】
使用 ALTER VIEW
语句修改视图,例如视图重命名:
ALTER VIEW orders_info RENAME TO orders_new;
【删除视图】
使用 DROP VIEW
语句删除视图:
DROP VIEW orders_info;
第九部分:创建和管理用户
KingbaseES中的用户是拥有数据库对象和权限的实体。为了确保数据的安全性,KingbaseES提供了多种方式来创建和管理用户。
【创建用户】
使用 CREATE USER
语句创建用户:
CREATE USER test WITH PASSWORD '123456';
提示
只有超级用户或具有CREATE ROLE系统权限的用户才可以创建用户。
使用createuser命令行工具创建用户:
createuser rdjc
【修改用户】
使用 ALTER USER
语句修改用户密码:
ALTER USER test PASSWORD '654321';
使用 ALTER USER
语句限制用户的连接数:
ALTER USER test CONNECTION LIMIT 1000;
使用 ALTER USER
语句增加CREATE ROLE权限:
ALTER USER test CREATE ROLE;
使用 ALTER USER
语句重命名用户名:
ALTER USER test RENAME TO Joe;
【查看用户】
使用SELECT语句查询sys_user视图查看用户:
SELECT * FROM sys_user;
使用ksql工具的 \du
命令查看用户:
\du
【授予权限】
GRANT
语句用于将对象的权限或角色的权限授予另一个角色或用户。
- 示例
使用GRANT语句将表的插入和更新权限授予用户:
GRANT INSERT, UPDATE ON orders TO Joe;
使用GRANT语句将表的查询权限授予多个用户:
GRANT SELECT ON orders TO rdjc, Joe;
【撤销权限】
REVOKE
语句用于从角色或用户处收回对象的权限或角色的权限。
使用REVOKE语句撤销用户在表上的插入和更新权限:
REVOKE INSERT, UPDATE ON orders FROM Joe;
使用REVOKE语句撤销多个用户在表上的查询权限:
REVOKE SELECT ON orders FROM rdjc, Joe;
【删除用户】
使用 DROP USER
语句删除用户:
DROP USER Joe;
使用dropuser命令行工具删除用户:
dropuser rdjc
第十部分:启动和管理事务
数据库中的事务是一个独立的逻辑单元,它包括了一个或多个SQL语句。一个事务中的语句要么全部执行,要么全不执行。
【事务控制命令】
-
启动事务
用户可以使用
START TRANSACTION
或者BEGIN
启动事务。更多启动事务的信息 -
设置事务
在多个事务并发执行时,系统应保证并发执行后与这些事务先后单独执行时的结果一样,因此对事务隔离级别有一定的要求。
用户可以使用
SET TRANSACTION
设置事务隔离级别、事务访问模式(读/写或只读)以及可延迟模式。 -
提交事务
用户可以使用COMMIT或者END完成提交事务的功能。
-
回滚事务
回滚是在事务运行的过程中发生了某种故障,导致事务不能继续执行,最终数据库会撤销该事务内所有更新。
【事务示例】
- 开启一个事务
BEGIN;
- 向orders表中插入一条新的记录
INSERT INTO orders VALUES(107,'RDJC',5,'1999-03-20');
- 如果操作都成功完成,开始提交事务
COMMIT;
- 插入语句执行失败的语句(orders表存在主键约束)
INSERT INTO orders VALUES(107,'RDJC',5,'2000-03-20');
ERROR: duplicate key value violates unique constraint "pk_orders"
DETAIL: Key (order_id)=(107) already exists.
- 当语句执行失败时,COMMIT与ROLLBACK等效,均为回滚事务
ROLLBACK;
结尾
合理使用索引、视图、用户管理与事务控制,能够显著提升数据库的性能与可维护性,而选择 KingbaseES(KES)作为底层平台,本身就为这些实践提供了天然的优势。对于索引与查询优化,KES 支持多种索引类型与统计信息收集机制,结合其执行器与优化器的持续改进,可以在大多数业务场景下带来稳定且可预测的查询性能提升。视图与物化视图功能完善,便于实现逻辑复用与性能加速,同时支持灵活的刷新策略以兼顾实时性与资源消耗。
在用户与权限管理层面,KES 提供细粒度的角色体系与审计能力,便于贯彻最小权限原则并满足合规审计要求。事务处理方面,基于成熟的 MVCC 与并发控制机制,KingbaseES 能有效处理高并发写入与读写冲突,支持多种隔离级别与保存点,帮助研发与运维团队更容易实现数据一致性与故障恢复策略。再者,KingbaseES 在高可用、备份恢复与监控诊断方面提供完善方案,结合厂商支持可以快速响应生产问题,降低运维成本与风险。
总之,借助 KingbaseES 的平台能力和企业级特性,配合本文所述的索引优化、视图设计、权限治理与事务管理方法,您可以更高效地构建安全、稳定且高性能的数据库系统。持续的性能监控、定期审计与自动化运维,将把这些优势转化为长期的业务价值与可持续的运营能力。