800 Star 6.1K Fork 2.4K

GVPDataGear / datagear

 / 详情

mysql查询表基本信息sql性能问题

已关闭
创建于  
2022-07-28 17:34

库实例多表多的情况下,无响应

原来的SQL==>
SELECT
A.REFERENCED_TABLE_SCHEMA AS PKTABLE_CAT,
NULL AS PKTABLE_SCHEM,
A.REFERENCED_TABLE_NAME AS PKTABLE_NAME,
A.REFERENCED_COLUMN_NAME AS PKCOLUMN_NAME,
A.TABLE_SCHEMA AS FKTABLE_CAT,
NULL AS FKTABLE_SCHEM,
A.TABLE_NAME AS FKTABLE_NAME,
A.COLUMN_NAME AS FKCOLUMN_NAME,
A.ORDINAL_POSITION AS KEY_SEQ,
CASE

WHEN R.UPDATE_RULE = 'CASCADE' THEN
0 
WHEN R.UPDATE_RULE = 'SET NULL' THEN
2 
WHEN R.UPDATE_RULE = 'SET DEFAULT' THEN
4 
WHEN R.UPDATE_RULE = 'RESTRICT' THEN
1 
WHEN R.UPDATE_RULE = 'NO ACTION' THEN
1 ELSE 1 

END AS UPDATE_RULE,
CASE

WHEN R.DELETE_RULE = 'CASCADE' THEN
0 
WHEN R.DELETE_RULE = 'SET NULL' THEN
2 
WHEN R.DELETE_RULE = 'SET DEFAULT' THEN
4 
WHEN R.DELETE_RULE = 'RESTRICT' THEN
1 
WHEN R.DELETE_RULE = 'NO ACTION' THEN
1 ELSE 1 

END AS DELETE_RULE,
A.CONSTRAINT_NAME AS FK_NAME,
(
SELECT
CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
TABLE_SCHEMA = A.REFERENCED_TABLE_SCHEMA
AND TABLE_NAME = A.REFERENCED_TABLE_NAME
AND CONSTRAINT_TYPE IN ( 'UNIQUE', 'PRIMARY KEY' )
LIMIT 1
) AS PK_NAME,
7 AS DEFERRABILITY
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE A
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS B USING ( CONSTRAINT_NAME, TABLE_NAME )
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS R ON ( R.CONSTRAINT_NAME = B.CONSTRAINT_NAME AND R.TABLE_NAME = B.TABLE_NAME AND R.CONSTRAINT_SCHEMA = B.TABLE_SCHEMA )
WHERE
B.CONSTRAINT_TYPE = 'FOREIGN KEY'
AND A.TABLE_SCHEMA = 'demo'
AND A.TABLE_NAME = 'table1'
AND A.REFERENCED_TABLE_SCHEMA IS NOT NULL
ORDER BY
A.REFERENCED_TABLE_SCHEMA,
A.REFERENCED_TABLE_NAME,
A.ORDINAL_POSITION
;

评论 (2)

维尔chris 创建了任务

改进后
==>新的
SELECT
A.REFERENCED_TABLE_SCHEMA AS PKTABLE_CAT,
NULL AS PKTABLE_SCHEM,
A.REFERENCED_TABLE_NAME AS PKTABLE_NAME,
A.REFERENCED_COLUMN_NAME AS PKCOLUMN_NAME,
A.TABLE_SCHEMA AS FKTABLE_CAT,
NULL AS FKTABLE_SCHEM,
A.TABLE_NAME AS FKTABLE_NAME,
A.COLUMN_NAME AS FKCOLUMN_NAME,
A.ORDINAL_POSITION AS KEY_SEQ,
CASE

WHEN R.UPDATE_RULE = 'CASCADE' THEN
0 
WHEN R.UPDATE_RULE = 'SET NULL' THEN
2 
WHEN R.UPDATE_RULE = 'SET DEFAULT' THEN
4 
WHEN R.UPDATE_RULE = 'RESTRICT' THEN
1 
WHEN R.UPDATE_RULE = 'NO ACTION' THEN
1 ELSE 1 

END AS UPDATE_RULE,
CASE

WHEN R.DELETE_RULE = 'CASCADE' THEN
0 
WHEN R.DELETE_RULE = 'SET NULL' THEN
2 
WHEN R.DELETE_RULE = 'SET DEFAULT' THEN
4 
WHEN R.DELETE_RULE = 'RESTRICT' THEN
1 
WHEN R.DELETE_RULE = 'NO ACTION' THEN
1 ELSE 1 

END AS DELETE_RULE,
A.CONSTRAINT_NAME AS FK_NAME,
(
SELECT
CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
TABLE_SCHEMA = A.REFERENCED_TABLE_SCHEMA
AND TABLE_NAME = A.REFERENCED_TABLE_NAME
AND CONSTRAINT_TYPE IN ( 'UNIQUE', 'PRIMARY KEY' )
and TABLE_SCHEMA = 'demo'
and TABLE_NAME = 'table1'
LIMIT 1
) AS PK_NAME,
7 AS DEFERRABILITY
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE A
inner JOIN (
select CONSTRAINT_NAME,TABLE_NAME,TABLE_SCHEMA
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where CONSTRAINT_TYPE = 'FOREIGN KEY'
and TABLE_SCHEMA = 'demo'
and TABLE_NAME = 'table1'
group by CONSTRAINT_NAME,TABLE_NAME,TABLE_SCHEMA
) B
on a.CONSTRAINT_NAME=b.CONSTRAINT_NAME
and a.TABLE_NAME=b.TABLE_NAME
and a.TABLE_SCHEMA=b.TABLE_SCHEMA
inner JOIN (
select UPDATE_RULE,DELETE_RULE,CONSTRAINT_NAME,TABLE_NAME,CONSTRAINT_SCHEMA
from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
where CONSTRAINT_SCHEMA= 'demo'
and TABLE_NAME = 'table1'
group by UPDATE_RULE,DELETE_RULE,CONSTRAINT_NAME,TABLE_NAME,CONSTRAINT_SCHEMA
) R
ON R.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND R.TABLE_NAME = B.TABLE_NAME
AND R.CONSTRAINT_SCHEMA = B.TABLE_SCHEMA
WHERE A.TABLE_SCHEMA = 'demo'
AND A.TABLE_NAME = 'table1'
AND A.REFERENCED_TABLE_SCHEMA IS NOT NULL
ORDER BY
A.REFERENCED_TABLE_SCHEMA,
A.REFERENCED_TABLE_NAME,
A.ORDINAL_POSITION
;

DataGear查询表基本信息使用的是数据库JDBC驱动的自带的API,没有自己通过SQL实现,性能也仅由数据库JDBC驱动而定

datagear 任务状态待办的 修改为已取消

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
2055474 datagearadmin 1663816640
Java
1
https://gitee.com/datagear/datagear.git
git@gitee.com:datagear/datagear.git
datagear
datagear
datagear

搜索帮助