【数据库学习】PostgreSQL优化

  1. pg安装与运维
  2. Postgres原理及底层实现
  3. 基础语法
  4. SQL优化
  5. 中文文档

1,数据库减负思路

  1. 缓存 + 页面静态化
    实时性不高的数据;
  2. 数据库优化=sql优化 + 表结构优化 + 数据库分区分表
    合并数据库操作,将多次操作合并成一条sql执行。
  3. 热点数据分离
    主表只保存活跃数据。
  4. 数据库读写分离

2,执行计划

1)场景

explain只能分析:SELECT、INSERT、DELETE、UPDATE和DECLARE…CURSOR命令。

2)使用

ANALYZE 缺省表示只计划;加上表示查看实际执行成本。

#查看执行计划。也可以使用navicat的解释功能查看。
explain [ANALYZE] sql语句;  

3)结果说明

1>算子

2>缓存-shared

  • Hit - 命中
  • Read - 读磁盘
  • Dirtied - 脏页(脏页包含在Hit中)

3>统计数据

QUERY PLAN
Index Scan using tenk1_unique1 on tenk1  (cost=0.00..10.01 rows=1 width=244)
  1. cost:启动开销…总开销。
    不过事实总开销可能会低一点:带有 LIMIT 子句的查询将会在 Limit 规划节点的输入节点里很快停止。
  2. rows:预计输出的行数
   Index Cond: (unique1 < 3)  --从索引中检索出的行的过滤器
   Filter: (stringu1 = 'xxx'::name)
  1. Filter:过滤条件
QUERY PLAN
--嵌套循环
 Nested Loop  (cost=2.37..553.11 rows=106 width=488) 
   ->  Bitmap Heap Scan on tenk1 t1  (cost=2.37..232.35 rows=106 width=244) 
         Recheck Cond: (unique1 < 100)
         --位图索引
         ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0)
               Index Cond: (unique1 < 100)
   ->  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.00..3.01 rows=1 width=244)
         Index Cond: ("outer".unique2 = t2.unique2)


QUERY PLAN
--内存 Hash 表
 Hash Join  (cost=232.61..741.67 rows=106 width=488)
   Hash Cond: ("outer".unique2 = "inner".unique2)
   ->  Seq Scan on tenk2 t2  (cost=0.00..458.00 rows=10000 width=244)
   ->  Hash  (cost=232.35..232.35 rows=106 width=244)
         ->  Bitmap Heap Scan on tenk1 t1  (cost=2.37..232.35 rows=106 width=244)
               Recheck Cond: (unique1 < 100)
               ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0)
                     Index Cond: (unique1 < 100)

4>调整执行计划

在navicat当前窗口执行,仅当前窗口生效。

SET enable_hashjoin = on;  -- 允许哈希连接 
<think>好的,我现在需要帮用户解决学习PostgreSQL数据库的问题。首先,用户明确提到想要学习使用PostgreSQL,需要相关的学习资料和入门教程。根据用户提供的引用内容,有三个参考资料,其中引用1和3是入门教程,引用2是版本13和14的新功能特性。 首先,我应该整理这些引用中的信息。引用1介绍了PostgreSQL的基本概念、特点、安装步骤和示例,适合入门。引用3提到了创建表的SQL语法,这是基础操作的一部分。引用2则讨论了版本13和14的新功能,可能对进阶学习有帮助。接下来,我需要按照用户的要求,结构清晰地分步骤回答,确保内容真实可靠。 用户的问题是关于学习资料和入门教程,所以需要先推荐官方文档和社区资源,然后分步骤说明安装、基本操作、高级特性等。同时,用户提到的示例中的代码格式需要用正确的LaTeX,但这里可能涉及的是SQL示例,所以需要注意代码块的格式是否正确。比如引用3中的创建表语句应该用代码块展示,但用户给的示例中可能没有正确标记,需要检查。 另外,用户要求生成相关问题,需要根据内容提出几个相关问题,比如安装问题、基础操作、性能优化等。确保问题与内容相关,帮助用户深入学习。 现在需要组织回答的结构: 1. 学习资料推荐:官方文档、社区教程、书籍、在线课程。 2. 入门步骤:安装、基本操作(创建数据库、表)、数据操作、高级功能。 3. 示例代码:创建表、插入数据、查询。 4. 相关问题:安装问题、性能优化、应用场景等。 在引用时,需要正确标注来源,比如安装步骤参考引用1,创建表参考引用3,版本特性参考引用2。同时要检查是否有遗漏的信息,比如用户提到的版本13和14的新功能,应该在进阶部分提到,并引导用户参考引用2。 可能需要注意用户提到的LaTeX要求,但回答中主要是文本和代码块,数学公式可能较少,不过如果有涉及比如性能指标的计算,需要用$...$格式。但根据引用内容,可能不需要数学公式,所以可能这部分可以忽略,但需要确保其他格式正确。 最后,生成的相关问题需要围绕PostgreSQL学习路径,从安装到基础使用,再到高级特性,以及实际应用中的问题。确保问题有针对性,帮助用户进一步探索。 总结下来,回答的结构应该清晰,分点说明,引用正确,示例准确,问题相关。</think>### PostgreSQL数据库学习指南 以下内容基于官方文档和社区资源整理,结合示例和步骤说明,帮助您系统学习PostgreSQL。 --- #### **一、学习资料推荐** 1. **官方文档** - 最权威的学习资源,涵盖安装、配置、SQL语法、高级功能等[^1]。 - 链接:[PostgreSQL Documentation](https://www.postgresql.org/docs/) 2. **社区教程** - 如《PostgreSQL 入门教程》,讲解历史背景、基本概念和简单示例[^3]。 3. **书籍推荐** - 《PostgreSQL从入门到精通》:适合系统学习,包含实战案例。 - 《The Art of PostgreSQL》:深入高级特性和性能优化。 4. **在线课程** - Coursera、Udemy等平台的PostgreSQL课程,适合交互式学习。 --- #### **二、入门步骤与核心操作** 1. **安装与配置** - 下载地址:[PostgreSQL官网](https://www.postgresql.org/download/) - 安装后通过`psql`命令行工具或pgAdmin图形界面操作数据库。 2. **创建数据库与表** ```sql -- 创建数据库 CREATE DATABASE mydb; -- 切换到数据库 \c mydb -- 创建表(引用示例) CREATE TABLE students ( id SERIAL PRIMARY KEY, name VARCHAR(50), age INT ); [^3] ``` 3. **数据操作** - 插入数据: ```sql INSERT INTO students (name, age) VALUES ('Alice', 22); ``` - 查询数据: ```sql SELECT * FROM students WHERE age > 20; ``` 4. **进阶功能** - **事务控制**:`BEGIN`, `COMMIT`, `ROLLBACK` - **索引优化**:`CREATE INDEX idx_name ON students(name);` - **版本特性**:如PostgreSQL 14的并行查询优化和逻辑复制增强[^2]。 --- #### **三、实践示例:搭建简单应用** 1. **需求**:存储并查询用户信息。 2. **步骤**: - 创建表: ```sql CREATE TABLE users ( user_id INT GENERATED ALWAYS AS IDENTITY, username VARCHAR(50) UNIQUE, email VARCHAR(100), PRIMARY KEY(user_id) ); ``` - 插入数据: ```sql INSERT INTO users (username, email) VALUES ('bob', 'bob@example.com'); ``` - 查询结果: ```sql SELECT * FROM users WHERE username = 'bob'; ``` --- #### **四、常见问题与解决** 1. **安装失败** - 检查系统依赖(如Linux需安装`libreadline-dev`)。 2. **权限错误** - 使用`GRANT`语句分配权限: ```sql GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser; ``` 3. **性能优化** - 使用`EXPLAIN ANALYZE`分析查询计划[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值