首页 > 数据库 >【优化】PostgreSQL或者openGauss的SQL优化策略

【优化】PostgreSQL或者openGauss的SQL优化策略

时间:2024-06-30 20:27:14浏览次数:3  
标签:PostgreSQL VERBOSE true SQL 索引 表名 ANALYZE 优化

【优化】PostgreSQL或者openGauss的SQL优化策略


PostgreSQL或者openGauss的SQL优化策略 :

1、在字段的子查询里面,能不用函数的尽量不用函数,改SQL

2、子查询改为left join

3、where条件的等于号左边的字段尽量不用函数,改SQL

4、看执行计划,分析表(ANALYZE VERBOSE 表名;)

在select之前加:explain(analyze true,verbose true,costs true,buffers true,timing true,format text)
看花销cost,cost=101468.69…101470.94,前面是执行计划启动的时间,后面是实际执行时间
看执行时间(cost=0.00…101466.92 rows=60 width=550) (actual time=224.646…306.602 rows=2214 loops=1),
如果cost和actual time这两个里面的rows相差太大,这个说明表的统计信息不准,
就需要执行分析表(ANALYZE VERBOSE 表名;)

5、清理表(VACUUM (VERBOSE, ANALYZE) 表名;)

表是否很久没有清理,有死元组太多,这样影响查询速度
如何查死元组:

-- 死元组,分析时间、真空时间
select n_dead_tup
      ,last_vacuum,last_autovacuum
      ,last_analyze,last_autoanalyze
      ,t.* 
  from pg_stat_all_tables t
 where schemaname='schem名' 
   and relname ~ '表名';
VACUUM (VERBOSE, ANALYZE) 表名;  -- 真空表,不锁表,只标记需要清理
VACUUM full 表名;  -- 锁表,彻底清理

6、看执行计划,如何看sql是否走了索引,如何加索引

建索引需要根据区分度高的1个或多个字段来建,区分度高的字段往前放,
区分度高的字段where条件往前放,
多表关联,大表放前面做为基表先查先过滤
Index Cond:越多越好,效率越高

7、高斯的优化方式,增加hint,制定表走适配的索引

SELECT /*+ indexscan(表名或者表别名 索引名) */* from 表名;

8、PostgreSQL的改法,把单表的自动清理和自动分析表收集统计信息的因子(频率)调整为2%,即100条里面有2条更新或者删除、新增这种情况的就会触发

alter table 表名 set(autovacuum_analyze_scale_factor=0.02);

Oracle优化53个规则详解
https://blog.csdn.net/tttzzzqqq2018/article/details/133875256

标签:PostgreSQL,VERBOSE,true,SQL,索引,表名,ANALYZE,优化
From: https://blog.csdn.net/tttzzzqqq2018/article/details/139987998

相关文章

  • 安装MySQL
    安装MySQLyum安装MySQL[root@7-1~]#yuminstallmariadb-server-y[root@7-1~]#systemctlstartmariadb.service[root@7-1~]#mysql[root@7-1~]#mysql_secure_installation#初始化设置先输入密码一路回车[root@7-1~]#tee/etc/yum.repos.d/mysql.repo<<EOF......
  • MySQL优化
    MySQL优化1、尽量避免使用子查询例:SELECT*FROMt1WHEREid(SELECTidFROMt2WHEREname='chackca');其子查询在Mysql5.5版本里,内部执行计划是这样:先查外表再匹配内表,而不是先查内表t2,当外表的数据很大时,查询速度会非常慢在MariaDB10/Mysql5.6版本里,采用join关联方式......
  • 深入解析MySQL语句的执行步骤
    目录MySQL架构概述语句执行步骤总览连接管理与线程处理语法解析查询缓存语义解析与预处理查询优化执行计划生成存储引擎层执行结果集返回优化查询性能的技巧结论MySQL架构概述在深入探讨MySQL语句执行的具体步骤之前,我们先来了解MySQL的整体架构。MySQL架构主要包括以下......
  • 【sqlite3】联系人管理系统
    SQLite3实现简单的联系人管理系统有关sqlite3的基础知识请点击:SQLite3的使用效果展示:创建一个名为contacts.db的数据库首先,我们需要创建一个名为contacts.db的数据库,并建立一个名为"contact"的表,用于存储联系人信息。该表包含四个列:id、name、phone和email。以下是创......
  • SQL Server的隐私盾牌:动态数据屏蔽(DMS)全面解析
    ......
  • 基于JSP和MySQL的小说阅读网站系统
    开头语:你好,我是计算机专业的猫哥,如果你对小说阅读网站感兴趣,欢迎联系我。开发语言:JSP数据库:MySQL技术:JSP+Java工具:MySql数据库,Java开发工具系统展示首页管理员功能模块读者后台功能模块作者后台功能模块摘要随着网络的发展,小说阅读行业迅速壮大,小说阅读网......
  • Fastapi 项目第二天首次访问时数据库连接报错问题Can't connect to MySQL server
    问题描述Fastapi项目使用sqlalchemy连接的mysql数据库,每次第二天首次访问数据库相关操作,都会报错:sqlalchemy.exc.OperationalError:(pymysql.err.OperationalError)(2003,"Can'tconnecttoMySQLserveron'x.x.x.x'([Errno111]Connectionrefused)")问题分析从出......
  • MySQL 常见性能问题排除
     随着时间的推移,即使是设计良好的数据库也会遇到性能问题,这些问题源于各种因素,如数据的增长、次优的索引策略、优化不佳的查询或不均衡的服务器配置。 常见的性能问题1.查询速度慢最常见的性能问题之一是查询执行缓慢。缓慢的查询会增加等待时间,阻碍应用程序的响应速度,从......
  • 解读MySQL 8.0数据字典的初始化与启动
    本文分享自华为云社区《MySQL全文索引源码剖析之Insert语句执行过程》,作者:GaussDB数据库。本文主要介绍MySQL8.0数据字典的基本概念和数据字典的初始化与启动加载的主要流程。MySQL8.0数据字典简介数据字典(DataDictionary,DD)用来存储数据库内部对象的信息,这些信息也被称......
  • 【SQL】⼀条 SQL 查询语句的执⾏顺序
    SQL查询语句的执行顺序与编写查询语句的顺序不同,理解SQL查询的执行顺序有助于更好地优化和调试SQL查询。下面是SQL查询语句的基本的执行顺序:FROM:确定数据源,包含表连接(JOIN)操作。ON:定义连接条件(对于JOIN子句)。WHERE:过滤数据,排除不符合条件的行。GROUPBY:对......