智能数据库客户端工具真香!

2023-09-02 15:17:41 浏览数 (1)

今年最火的 IT 技术当属 AIGC,AI 已经应用到各种场景,最近在逛github时候发现了一个智能且多功能的多数据库客户端工具--Chat2DB,目前在GitHub上标星8k 。

项目简介

Chat2DB 是阿里开源多数据库客户端工具,支持 Windows、Mac、Linux等操作系统,Chat2DB 相比于其他数据库客户端 Navicat、DBeaver,Chat2DB集成了AIGC的能力,能够通过自然语言转换成 SQL,也可以将SQL转换为自然语言,同时还可以优化 SQL。目前支持MySQL、PostgreSQL、Oracle、SQLServer、ClickHouse、OceanBase、H2、SQLite等数据库。

下载安装

项目地址https://github.com/alibaba/Chat2DB/releases,根据自己操作系统下载安装即可。

配置AI,API_KEY 可以在Chat2DB 官网中获取。

自然语言转SQL

首先准备3张测试表

代码语言:javascript复制
-- 1、建部门表
create table dept(
DEPTNO INT(2) NOT NULL PRIMARY KEY,
DNAME VARCHAR(14),
LOC VARCHAR(13)
);

-- 2、建员工表
CREATE TABLE emp(
EMPNO INT(4) NOT NULL PRIMARY KEY,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR NUMERIC(4),
HIREDATE DATETIME,
SAL NUMERIC(7,2),
COMM NUMERIC(7,2),
DEPTNO INT(2)
);

-- 3、建工资等级表
CREATE TABLE salgrade (
GRADE NUMERIC,
LOSAL NUMERIC,
HISAL NUMERIC
);

Chat2DB 可以使用自然语言直接添加测试数据,这个功能太香了!查询支持单表查询、多表联合查询。

温馨提示自然语言转SQL,需要在选中需要处理的语句后选择用于生成的SQL的原始表。

代码语言:javascript复制
--- BEGIN ---
员工表插入测试10条测试数据

--- 自然语言转换 ---
INSERT INTO emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) 
VALUES 
(1, 'John', 'Manager', NULL, '2021-01-01', 5000, NULL, 1),
(2, 'Jane', 'Salesman', 1, '2021-02-01', 3000, 500, 1),
(3, 'Bob', 'Clerk', 1, '2021-03-01', 2000, NULL, 2),
(4, 'Mary', 'Salesman', 1, '2021-04-01', 2500, 100, 2),
(5, 'Tom', 'Manager', NULL, '2021-05-01', 6000, NULL, 1),
(6, 'Sue', 'Salesman', 5, '2021-06-01', 3500, 700, 1),
(7, 'Mike', 'Clerk', 5, '2021-07-01', 2200, NULL, 2),
(8, 'Lisa', 'Salesman', 5, '2021-08-01', 2800, 200, 2),
(9, 'Jack', 'Manager', NULL, '2021-09-01', 7000, NULL, 1),
(10, 'Jill', 'Clerk', 9, '2021-10-01', 2400, NULL, 2);
--- END --- 


--- BEGIN ---
部门表插入5条数据

--- 自然语言转换 ---
INSERT INTO dept (DEPTNO, DNAME, LOC) VALUES 
(1, '部门1', '地点1'), 
(2, '部门2', '地点2'), 
(3, '部门3', '地点3'), 
(4, '部门4', '地点4'), 
(5, '部门5', '地点5');
--- END --- 

--- BEGIN ---
工资等级表插入3条数据
--- 自然语言转换 ---
INSERT INTO salgrade (GRADE, LOSAL, HISAL) VALUES 
(1, 700, 1200), 
(2, 1201, 1400), 
(3, 1401, 2000);
--- END --- 

--- BEGIN ---
查询年龄大于30岁的员工
--- 自然语言转换 ---
SELECT * FROM emp WHERE TIMESTAMPDIFF(YEAR, HIREDATE, CURDATE()) > 30;
--- END --- 

--- BEGIN ---
查询各个部门工资总和

--- 自然语言转换 ---
SELECT DEPTNO, SUM(SAL) AS TOTAL_SALARY FROM emp GROUP BY DEPTNO;
--- END ---

SQL解释

把SQL翻译为自然语言,适合很长的 sql 语句,便于理解。

代码语言:javascript复制
--- BEGIN ---
select ename as "姓名",sal*12 comm as "年 薪" from emp;

--- 解释SQL ---
这个SQL语句从emp表中选择ename和sal列,并将sal乘以12加上comm列的值作为“年薪”列。结果将以“姓名”和“年薪”列的形式返回。
--- END ---

SQL优化

对于性能不好的sql,给出优化建议。

代码语言:javascript复制
--- BEGIN ---
SELECT COUNT(*) FROM emp WHERE HIREDATE  BETWEEN '2012-01-01' AND '2012-12-31';

--- SQL优化 ---
优化建议如下:

1. 索引优化:为HIREDATE列创建索引,可以加快查询速度。

2. 数据库分区:如果emp表非常大,可以考虑对其进行分区,以提高查询效率。

3. 日期格式优化:将日期格式转换为标准格式,如YYYY-MM-DD,可以避免不必要的转换和比较操作,提高查询效率。

4. 缓存优化:如果查询频率较高,可以考虑将查询结果缓存起来,以减少数据库访问次数。

5. 查询语句优化:使用EXISTS或IN子查询代替BETWEEN操作符,可以提高查询效率。例如:

SELECT COUNT(*) FROM emp WHERE HIREDATE IN (SELECT HIREDATE FROM emp WHERE HIREDATE >= '2012-01-01' AND HIREDATE <= '2012-12-31');

或者:

SELECT COUNT(*) FROM emp WHERE EXISTS (SELECT 1 FROM emp WHERE HIREDATE >= '2012-01-01' AND HIREDATE <= '2012-12-31' AND emp.HIREDATE = HIREDATE);
--- END ---

项目地址

代码语言:javascript复制
https://github.com/alibaba/Chat2DB

总结

Chat2DB 不仅具有传统的数据库客户端的增删改查能力,同时还是具有了AI 能力,在复杂的业务SQL可能暂时还无法给到很正确提示,在后续的发展中正确性会越来越高的,感兴趣的小伙伴赶快去试试吧~

0 人点赞