通过icode9使用 PostgreSQL 进行数据库索引
2022/11/26 6:24:06
本文主要是介绍通过icode9使用 PostgreSQL 进行数据库索引,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
索引是提高读取性能的一种方法,但它也会使写入性能变差,因此请考虑根据您的用例在应用程序中使用索引。
为了演示,我将使用 antable 来处理 1000 万条记录:orders
create table orders ( id serial primary key, total integer, -- unit: usd user_id integer, created_at date );
然后生成:
total
:范围内的随机数 (1 - 10k)
user_id
:范围内的随机数 (1 - 100k)
created_at
:范围内的随机日期 (2002 - 2022) (20 年)
表应如下所示:orders
id | total | user_id | created_at ----+-------+---------+------------ | 7492 | 9968 | 2021-03-20 | 3084 | 81839 | 2008-03-20 | 3523 | 85845 | 2018-12-22 ...
不带索引:
让我们用来查看此查询:explain analyze
query plan
explain analyze select sum(total) from orders where extract(year from created_at) = 2013;
查询将按照此计划按由内而外的顺序执行:
Finalize Aggregate └── Gather └── Partial Aggregate └── Parallel Seq Scan
因此,将与 2 个工人并行进行顺序扫描,然后对于每个工作人员,它将执行 a,然后执行来自工人的结果,然后执行 a。PostgreSQL
Partial Aggregation (sum function)
Gather
Finalized Aggregation (sum function)
在并行 Seq Scan 节点中,它执行 3 个循环,每个循环扫描 3,333,333 行 (= 3,166,526 + 166,807)
要了解如何协同工作,请阅读有关并行聚合和并行序列扫描的更多信息Partial AggregateFinalize Aggregate
带索引:
索引是为特定查询设计的,因此让我们考虑为两个不同查询创建索引的两种方法,但它们具有相同的目的。
在表达式上使用索引:
现在在列上创建一个索引,因为我们在查询上使用表达式,所以我们也需要在索引上使用该表达式(阅读更多关于表达式索引的信息):created_atextract(year from created_at)
create index my_index on orders (extract(year from created_at)); explain analyze select sum(total) from orders where extract(year from created_at) = 2013;
Aggregate └── Bitmap Heap Scan └── Bitmap Index Scan
现在它用于扫描,执行时间从(84,22%)减少,这很重要。my_index
1441.190ms
227.388ms
在列上使用索引:
还有另一种方法可以使用运算符计算2013年订单总值between
explain analyze select sum(total) from orders where created_at between '2013-01-01' and '2013-12-31';
标签:SQL,数据库,服务器,CPU,环境,网络服务器,SQLServer 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
这篇关于通过icode9使用 PostgreSQL 进行数据库索引的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15在使用平台私钥进行解密时提示 "私钥解密失败" 错误信息是什么原因?-icode9专业技术文章分享
- 2024-11-15Layui框架有哪些方式引入?-icode9专业技术文章分享
- 2024-11-15Layui框架中有哪些减少对全局环境的污染方法?-icode9专业技术文章分享
- 2024-11-15laydate怎么关闭自动的日期格式校验功能?-icode9专业技术文章分享
- 2024-11-15laydate怎么取消初始日期校验?-icode9专业技术文章分享
- 2024-11-15SendGrid 的邮件发送时,怎么设置回复邮箱?-icode9专业技术文章分享
- 2024-11-15使用 SendGrid API 发送邮件后获取到唯一的请求 ID?-icode9专业技术文章分享
- 2024-11-15mailgun 发送邮件 tags标签最多有多少个?-icode9专业技术文章分享
- 2024-11-15mailgun 发送邮件 怎么批量发送给多个人?-icode9专业技术文章分享
- 2024-11-15如何搭建web开发环境并实现 web项目在浏览器中访问?-icode9专业技术文章分享