查询性能差PostgreSQL

埃尔南·丹尼尔·加洛(HernánDaniel Garau)

我有一个查询:

SELECT
        '{\"nombre\":\"'||c.column_name||'\",\"type\":\"'|| c.data_type
        ||'\",\"is_nullable\":\"'|| c.is_nullable||'\",\"is_pk\":\"'|| CASE WHEN constraint_type = 'PRIMARY KEY' THEN 'SI' ELSE 'NO' END
        ||'\",\"max_length\":\"'||COALESCE(c.character_maximum_length::VARCHAR,'')||'\",\"FK_schema\":\"'||COALESCE(ccu.table_schema,'')||'\",\"FK_tabla\":\"'||
       COALESCE(ccu.table_name,'')||'\",\"FK_columna\":\"'||COALESCE(ccu.column_name,'')||
       '\"}' as id, c.column_name
FROM information_schema.columns AS c
LEFT JOIN  information_schema.key_column_usage i ON I.table_name=c.table_name AND I.table_schema=c.table_schema AND c.column_name = I.column_name 
LEFT JOIN information_schema.table_constraints tc ON TC.constraint_name = I.CONSTRAINT_NAME AND constraint_type IN ('FOREIGN KEY','PRIMARY KEY')
LEFT JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name 
AND constraint_type IN ('FOREIGN KEY')

WHERE c.table_schema = '".$_POST['schema']."' AND c.table_name='".$_POST['tabla']."'
AND NOT EXISTS (
        SELECT q.column_name FROM information_schema.constraint_column_usage  q
        inner join information_schema.table_constraints USING(constraint_name )
        WHERE c.table_schema = q.table_schema AND q.table_name=c.table_name AND q.column_name = c.column_name 
        AND tc.constraint_name > q.constraint_name AND TC.constraint_type <> 'PRIMARY KEY') 
ORDER BY c.ordinal_position;

它可以工作,但是在具有97个模式的数据库中,需要一整分钟的时间来运行。

我怎样才能解决这个问题?

没有这一行:

LEFT JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name AND constraint_type = 'FOREIGN KEY'

不到1秒的时间。

埃尔南·丹尼尔·加洛(HernánDaniel Garau)

我做了一个新的查询阅读此postgressql ...

    select 
        '{\"nombre\":\"'||columna.attname||'\",\"tipo\":\"'|| tipo.typname
        ||'\",\"is_nullable\":\"'|| CASE WHEN columna.attnotnull THEN 'NO' ELSE 'SI' END||'\",\"is_pk\":\"'|| CASE WHEN pk.conname IS NULL THEN 'NO' ELSE 'SI' END 
        ||'\",\"max_length\":\"'||COALESCE(character_maximum_length::varchar,'')||'\",\"FK_schema\":\"'||COALESCE(fk_schema.nspname,'')||'\",\"FK_tabla\":\"'||
       COALESCE(fk_tabla.relname,'')||'\",\"FK_columna\":\"'||COALESCE(fk_columna.attname,'')||
       '\"}' as id, columna.attname,columna.*
from pg_catalog.pg_namespace pgschema
inner join pg_catalog.pg_class clase  ON PGSCHEMA.OID = clase.relnamespace and relname ='".$_POST['tabla']."'
inner join  pg_catalog.pg_attribute columna ON ATtReLID = clase.oid
inner join pg_catalog.pg_type tipo ON tipo.oid = columna.atttypid
inner join information_schema.columns ON table_schema = pgschema.nspname AND table_name = clase.relname AND column_name = columna.attname
left join pg_catalog.pg_constraint pk ON pk.contype = 'p' AND PK.conrelid = clase.oid and array[columna.attnum] && pk.conkey
left join pg_catalog.pg_constraint Fk ON FK.contype = 'f' AND FK.conrelid = clase.oid and array[columna.attnum] && fk.conkey
left join pg_catalog.pg_class Fk_tabla ON FK.confrelid = fk_tabla.oid -- AND FK.conrelid = clase.oid and array[columna.attnum] && fk.conkey
left join pg_catalog.pg_namespace Fk_schema ON FK_tabla.relnamespace = fk_schema.oid
left join  pg_catalog.pg_attribute fk_columna ON fk_tabla.OID = fk_columna.attrelid AND ARRAY[fk_columna.attnum] && fk.confkey
where pgschema.nspname = '".$_POST['schema']."' and columna.attnum > 0;

不到1秒的时间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PostgreSQL:由未使用的索引引起的查询性能差吗?

来自分类Dev

获得Postgresql查询的性能

来自分类Dev

如何提高PostgreSQL查询性能

来自分类Dev

PostgreSQL日期归档查询性能

来自分类Dev

Postgresql:查询以汇总状态之间的日期差

来自分类Dev

为什么此LINQ可查询分页性能如此差?

来自分类Dev

Postgresql中不可预测的查询性能

来自分类Dev

Clojure性能差的代码性能

来自分类Dev

使用嵌套循环提高SQL查询的性能-PostgreSQL

来自分类Dev

索引文本字段上的PostgreSQL查询性能

来自分类Dev

为什么子查询中的on差异会影响PostgreSQL的性能?

来自分类Dev

PostgreSQL通过CTE优化包含Window函数的查询性能

来自分类Dev

嵌套不包含在PostgreSQL中提高查询性能

来自分类Dev

提高查询性能 - 从 oracle 选择数据到 postgresql

来自分类Dev

UICollectionView滚动性能差

来自分类Dev

ActiveAdmin的性能非常差

来自分类Dev

性能差,直到方向改变

来自分类Dev

反应 js 的性能非常差

来自分类Dev

保留联接1亿条数据的方式来提高PostgreSQL查询性能

来自分类Dev

在PostgreSQL 12中,如果查询包含在子表中,通过继承创建分区会提高查询性能吗?

来自分类Dev

PostgreSQL UUID类型性能

来自分类Dev

HikariCP 的 Postgresql 性能问题

来自分类Dev

Postgresql 模式匹配性能

来自分类Dev

SQL查询性能

来自分类Dev

Cassandra查询性能,范围

来自分类Dev

提高(查询)性能

来自分类Dev

OfType <>与“是”查询的性能

来自分类Dev

SQL查询的性能

来自分类Dev

MySQL查询性能(InnoDB)