KingbaseES聚焦产品上线
KingbaseES聚焦产品上线:金仓数据库在线体验平台上线,开启数据库实践新征程
KingbaseES 在线体验平台是为数据库使用者、开发者、架构师及 DBA 打造的轻量化实践平台,无需本地安装数据库环境,通过浏览器即可快速上手,降低技术探索门槛,加速对金仓数据库功能特性的验证与学习,助力技术预研、选型验证及新手能力提升 。
KingbaseES在线体验平台注册
1、注册KingbaseES官方账户
2、手机号注册即可
3、服务与支持-KingbaseES在线体验平台
4、即可完成在线体验
KingbaseES在线体验平台体验
索引
索引是一种与表相关联的数据结构,是为了提高数据检索的性能而建立的。KingbaseES索引为表数据提供快速存取路径。索引适用于一范围的行查询或指定行的查询。索引可建立在一个表的一列或多列上,一旦建立,将由 KingbaseES 数据库自动维护和使用,对用户是完全透明的,系统的优化器会根据统计信息确定是否使用索引来提高系统性能。索引逻辑和物理上都独立于与其相关联的表数据。因此,可以删除或创建索引,但不会对索引表产生影响。
创建索引
kingbaseES使用 create index 语句来创建普通b-tree索引
示例:在customers表的c_name列上创建索引
create index indx_c_name on customers(c_name);
在itms分区表中的i_price列上创建本地索引
create index indx_i_price on items (i_price) local;
在order表的o_id和o_date列上创建组合索引
create index idx_o_i_d on orders (o_id, o_date);
使用create unique index语句在orders表中为o_id列创建唯一索引
create unique index o_u_id on orders (o_id);
查看索引
通过使用select语句查询sys_indexes视图查看相关索引索引
示例:sql复制
select * from sys_indexes where schemaname='public';
修改索引
使用alter index语句可以o_u_id索引的相关属性信息
示例:使用alter index语句将o_u_id索引重命名为indx_rename_u_id
alter index o_u_id rename to indx_rename_u_id;
使用alter index语句将indx_rename_u_id设置索引填充因子
alter index indx_rename_u_id set (fillfactor = 60);
重建索引
使用reindex index语句重建indx_i_price索引:
reindex index indx_c_name;
使用reindex table语句重建表上所有索引:
reindex table orders;
删除索引
使用 drop index 语句删除索引
drop index indx_rename_u_id;
查询
查询是从一个或多个表或视图中检索数据的操作。顶级SELECT语句称为查询,嵌套在另一个SQL语句中的查询称为子查询。本节描述一些查询与子查询类型以及如何使用它们。
SELECT 命令的一般语法是:
[WITH with_queries] SELECT select_list FROM table_expression [sort_specification]
示例查询
- 简单查询
查询所有订单信息
SELECT O_ID, O_DATE, C_ID, I_ID, O_QUANTITY, O_TOTAL_PRICE FROM orders;
- 关联查询
查询客户的姓名和他们下的订单总数
SELECT I_NAME, I_STOCK FROM items GROUP BY I_NAME, I_STOCK;
- 分组查询
查询每个商品的库存情况(按价格分类)
SELECT c.C_NAME, COUNT(o.O_ID) AS order_count FROM customers c JOIN orders o ON c.C_ID = o.C_ID GROUP BY c.C_NAME;
- 子查询
查询订单金额大于 500 的订单信息
SELECT * FROM orders WHERE O_TOTAL_PRICE > ( SELECT AVG(O_TOTAL_PRICE) FROM orders);
- with子句
计算每个客户的总消费金额,并筛选出消费金额最高的前5名客户
WITH customer_total_amount AS (SELECT c.C_NAME,SUM(o.O_TOTAL_PRICE) AS total_amountFROM customers cJOIN orders o ON c.C_ID = o.C_IDGROUP BY c.C_NAME ) SELECT * FROM customer_total_amount ORDER BY total_amount DESC LIMIT 5;
视图
视图是一个或多个表的逻辑表示形式。与表不同,视图既不分配存储空间,也不包含数据,而是通过定义的一个查询,从它所引用的基表中提取或派生出数据。视图的数据来自它所依赖基表,基表可以是表或其他视图。在视图上执行的所有操作实际上都指向基表
视图创建
通过create view命令来进行创建视图,示例如下
- 销售统计视图
功能:按日期汇总订单金额和数量
CREATE VIEW sales_summary AS SELECT DATE(o.O_DATE) AS order_date,COUNT(o.O_ID) AS order_count,SUM(o.O_TOTAL_PRICE) AS total_sales FROM orders o GROUP BY DATE(o.O_DATE);
- 库存预警视图
功能:监控库存量低于 10 的商品
CREATE VIEW low_stock_items AS SELECT i.I_ID,i.I_NAME,i.I_STOCK FROM items i WHERE i.I_STOCK < 60;
- 客户消费记录视图
功能:展示客户的订单历史和总消费金额
CREATE VIEW customer_purchase_history AS SELECT c.C_NAME,o.O_DATE,i.I_NAME,o.O_QUANTITY,o.O_TOTAL_PRICE FROM customers c JOIN orders o ON c.C_ID = o.C_ID JOIN items i ON o.I_ID = i.I_ID;
视图查询
- 查询销售统计视图
SELECT * FROM sales_summary WHERE order_date = '2023-10-01';
- 查询库存预警视图
SELECT * FROM low_stock_items;
- 查询Alice Smith的订单历史和总消费金额
SELECT * FROM customer_purchase_history WHERE C_NAME = 'Alice Smith';
视图信息查询
通过使用select语句查询sys_views视图查看相关索引索引
select * from sys_views where schemaname='public';
删除视图
通过drop view命令来进行删除视图对象
drop view customer_purchase_history;
函数
SQL函数在KingbaseES数据库中作为内置组件存在,适用于多种SQL语句,需注意区分于由PL/SQL编写的用户自定义函数
调用这些SQL函数时,若参数类型不符,KingbaseES会自动将其转换为函数所需的数据类型,确保执行无碍
创建函数
示例:计算订单的折扣金额
CREATE OR REPLACE FUNCTION calculate_discount_amount(_o_id INT) RETURNS DECIMAL(8,2) AS $$ DECLARE total_price DECIMAL(8,2); BEGIN-- 从 orders 表中获取订单的总价SELECT O_TOTAL_PRICE INTO total_price FROM orders WHERE O_ID = _o_id;-- 假设折扣率为 10%RETURN total_price * 0.10; END$$ LANGUAGE plpgsql;
查看订单ID=1的原价
SELECT * from orders where o_id=1;
查看订单 ID=1 的折扣金额
SELECT calculate_discount_amount(1) AS discount_amount;
2599.98*0.1=259.9980,符合预期
触发器
触发器通过在数据操作时自动执行任务,强化了数据完整性和系统的自动化能力。合理设计和使用触发器,可以提升应用的效率、可靠性和安全性,但在开发和维护过程中需综合考虑性能影响和复杂性问题。
下面已一个简单示例来说明
创建触发器
示例
- 插入触发器
功能:每当插入一条新订单时,触发器会从商品表中减去相应数量的商品库存
\set SQLTERM / CREATE TRIGGER update_stock_AFTER_INSERT AFTER INSERT ON orders FOR EACH ROW BEGINUPDATE items SET I_STOCK = I_STOCK - NEW.O_QUANTITY WHERE I_ID = NEW.I_ID; END; /
查看当前库存情况
select * from items;
商品编号为1的库存为50
往order订单表中插入一条数据
INSERT INTO orders VALUES('11','2023-11-01', 1, 1, 1, 200),
再试试查看订单情况
select * from items;
商品编号为1的库存为49,证明触发器生效了
删除触发器
drop trigger update_stock_AFTER_INSERT;
总结
KingbaseES 中,索引作为提升数据检索性能的数据结构,可通过
CREATE INDEX
建立 B-Tree、组合或唯一索引等,并支持查看、修改、重建及删除操作;查询操作涵盖简单查询、关联查询、分组查询、子查询及 WITH 子句等类型,能从表或视图中高效检索数据;视图是基表的逻辑映射,不存储实际数据,可通过CREATE VIEW
创建销售统计、库存预警等视图以简化复杂查询;函数通过 PL/pgSQL 编写,如calculate_discount_amount
函数可计算订单折扣金额;触发器在数据操作时自动执行,例如插入订单时触发库存更新,通过CREATE TRIGGER
创建后可通过DROP TRIGGER
删除,这些功能共同强化了数据库的性能、安全性与自动化能力。