📜  关系查询评估 |设置 1(1)

📅  最后修改于: 2023-12-03 15:07:05.419000             🧑  作者: Mango

关系查询评估 | 设置 1

本程序是为了在数据库中进行关系查询及评估,方便用户对于数据库中的关系进行分析和优化。

使用方法

用户需要输入以下内容:

  • 操作类型(查询/评估)
  • 数据库名称
  • 数据表名称
  • 关系查询条件

程序会根据用户输入的信息,在数据库中进行查询或评估。

返回结果

查询操作将返回符合条件的结果,评估操作将返回如下信息:

  • 数据表大小
  • 索引使用情况
  • 查询性能数据
代码片段

以下是一个示例代码片段,可以作为参考:

import psycopg2
import pandas as pd

# 用户输入信息
operation_type = input("请输入操作类型(查询/评估):")
db_name = input("请输入数据库名称:")
table_name = input("请输入数据表名称:")
query_condition = input("请输入查询条件:")

# 连接数据库
conn = psycopg2.connect(database=db_name, user="postgres", password="password", host="127.0.0.1", port="5432")
cur = conn.cursor()

# 查询操作
if operation_type == "查询":
    cur.execute(f"SELECT * FROM {table_name} WHERE {query_condition}")
    rows = cur.fetchall()
    df = pd.DataFrame(rows, columns=[desc[0] for desc in cur.description])
    print(df.to_markdown())
else:
    # 评估操作
    cur.execute(f"SELECT pg_total_relation_size('{table_name}')")
    table_size = cur.fetchone()[0]
    print(f"数据表大小:{table_size/1024/1024}MB")
    
    cur.execute(f"SELECT relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch \
                  FROM pg_stat_user_indexes WHERE relname='{table_name}'")
    rows = cur.fetchall()
    df = pd.DataFrame(rows, columns=["索引名称", "被扫描次数", "获取元组数", "抓取元组数"])
    print(df.to_markdown())
    
    cur.execute(f"EXPLAIN ANALYZE SELECT * FROM {table_name} WHERE {query_condition}")
    rows = cur.fetchall()
    df = pd.DataFrame(rows, columns=["执行计划"])
    print(df.to_markdown())