1,数据库减负思路
- 缓存 + 页面静态化
实时性不高的数据; - 数据库优化=sql优化 + 表结构优化 + 数据库分区分表
合并数据库操作,将多次操作合并成一条sql执行。 - 热点数据分离
主表只保存活跃数据。 - 数据库读写分离
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)
- cost:启动开销…总开销。
不过事实总开销可能会低一点:带有 LIMIT 子句的查询将会在 Limit 规划节点的输入节点里很快停止。 - rows:预计输出的行数
Index Cond: (unique1 < 3) --从索引中检索出的行的过滤器
Filter: (stringu1 = 'xxx'::name)
- 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: (uni