137得票5回答
测量 PostgreSQL 表行的大小

我有一个PostgreSQL表。 select *非常缓慢,而select id很快。我认为可能是行的大小非常大,需要一段时间来传输,或者可能是其他因素。 我需要所有字段(或几乎所有字段),因此选择子集并不是一个快速解决方案。选择我想要的字段仍然很慢。 这是我的表模式,减去了名称: in...

69得票3回答
优化一个包含大量IN子句的Postgres查询 当在Postgres数据库中执行包含大量IN子句的查询时,可能会遇到性能问题。这是因为IN子句会导致数据库进行多次查找,从而增加了查询的复杂度和执行时间。 为了优化这样的查询,可以考虑以下几个方法: 1. 使用索引:确保查询涉及的列上有适当的索引。索引可以加快查询速度,并减少数据库需要扫描的数据量。 2. 使用临时表:将IN子句中的值存储在一个临时表中,然后使用JOIN操作将其与主查询关联起来。这样可以减少IN子句的数量,提高查询效率。 3. 使用EXISTS子查询:将IN子句转换为EXISTS子查询。EXISTS子查询只需要判断是否存在匹配的记录,而不需要返回实际的结果集。这可以减少查询的开销。 4. 分批处理:如果IN子句中的值太多,可以考虑将查询分成多个小批次进行处理。这样可以减少每次查询的数据量,提高查询的效率。 5. 优化查询计划:通过分析查询计划,可以确定是否存在潜在的性能问题。可以使用EXPLAIN命令来查看查询计划,并根据需要进行调整。 综上所述,通过合理使用索引、临时表、EXISTS子查询和分批处理等方法,可以有效地优化包含大量IN子句的Postgres查询,提高查询性能。

这个查询获取了你关注的人创建的帖子列表。你可以关注无限数量的人,但大多数人关注的人数不超过1000。 对于这种查询方式,显而易见的优化方法是缓存“Post”id,但很遗憾,我现在没有时间做这个。 EXPLAIN ANALYZE SELECT "Post"."id", "Po...

60得票2回答
WHERE子句是按照它们被书写的顺序应用吗?

我正在尝试优化一个查询,该查询涉及到一个庞大的表(3700万行),并且对于查询中操作的执行顺序有疑问。 select 1 from workdays day where day.date_day >= '2014-10-01' and day.date_day <= ...

55得票4回答
用相同的值更新一行,实际上会更新这一行吗?

我有一个与性能相关的问题。假设我有一个名字叫Michael的用户。请看下面的查询: UPDATE users SET first_name = 'Michael' WHERE users.id = 123 查询是否会执行更新操作,即使它被更新为相同的值?如果是这样,我该如何防止它发生?

38得票1回答
日期的索引优化

我在PostgreSQL 9.0.8中有一个包含大量对象(15M+行)的表,我想查询过时的字段。 为了可扩展性和并发性,我想将查询分成数百万个部分,并获取所有更新日期为几天前的数据。 我尝试了许多索引和查询,对于一百万个ID,我似乎无法在Heroku的Ronin硬件上获得低于100秒的性能...

28得票5回答
在多个列上选择不同的值

假设我们有一个包含四列(a、b、c、d)相同数据类型的表格。 在这些列中,是否有可能选择所有不重复的数值,并将它们作为单独一列返回?或者我需要创建一个函数来实现这个功能吗?

26得票2回答
大型表中的慢速索引扫描

更新日期 2020-08-04: 鉴于这个答案显然仍然经常被查看,我想对情况进行一次更新。我们目前在表格的timestamp上使用 PG 11 进行分区,并且能够轻松处理数十亿行的表格数据。只索引扫描真是救命稻草,没有它就不可能实现。 使用PostgreSQL 9.2版本时,我在一个相对...

23得票1回答
log_min_duration_statement设置被忽略了。

我在Ubuntu上运行Postgresql 9.1。确切的Postgresql版本是9.1+129ubuntu1,正如我的软件包管理器所显示的那样。 我有两个正在使用的数据库,并且它们是从远程服务器使用的。 我希望记录执行时间长的查询。因此,我在/etc/postgresql/9.1/ma...

22得票2回答
在性能方面,许多列与少量表之间的比较 在性能方面,我们经常会遇到一个问题:是使用许多列和少量表,还是相反?这个问题没有简单的答案,因为它取决于具体的情况和需求。 让我们先来看看使用许多列的情况。当我们有大量的数据需要存储时,使用许多列可能是一个不错的选择。这样做可以减少表之间的连接操作,提高查询的速度。此外,由于数据都存储在同一张表中,维护起来也更加方便。 然而,使用许多列也存在一些缺点。首先,当我们只需要查询表中的部分列时,查询的效率可能会降低。其次,如果我们需要频繁地更新或删除某些列,那么维护起来可能会变得非常困难。 另一方面,使用少量表可能更适合某些情况。当我们的数据结构比较复杂,或者需要进行复杂的关联查询时,使用少量表可能更加灵活和可扩展。此外,如果我们需要频繁地更新或删除某些数据,使用少量表可能更容易实现。 然而,使用少量表也有一些缺点。首先,由于表之间需要进行连接操作,查询的速度可能会受到一定的影响。其次,维护多个表可能会变得复杂和繁琐。 总之,在选择使用许多列还是少量表时,我们需要权衡各种因素,包括数据量、查询需求、更新频率等。没有一种方法适用于所有情况,所以我们需要根据具体情况做出决策。

是的,我知道数据规范化应该是我的首要任务(因为它确实如此)。 1. 我有一个包含65个列的表,存储着车辆数据,列包括:used_vehicle、color、doors、mileage、price等等,总共65个列。 2. 现在,我可以将其分成一个Vehicle表、VehicleInterio...

19得票1回答
对于只接收INSERT操作的表是否值得运行VACUUM?

在2015年的re:Invent演讲中,AWS提到除了在更新或删除之后,还应该在插入操作之后运行vacuum。以下是演讲中相关的部分内容: http://www.youtube.com/watch?v=tZXp19q8RFo&t=16m2s 据说即使只有插入操作,块上也必须进行一些...