145得票4回答
优化在一系列时间戳上的查询(两列)

我在Ubuntu 12.04上使用PostgreSQL 9.1。 我需要在一个时间范围内选择记录:我的表time_limits有两个timestamp字段和一个integer属性。我的实际表中还有其他列,与此查询无关。 create table ( start_date_time t...

129得票7回答
如何确定是否需要或必须创建一个索引 在设计数据库时,确定是否需要创建索引是一个重要的决策。索引可以提高查询性能,但也会增加数据插入、更新和删除的开销。因此,我们需要仔细考虑何时创建索引。 以下是一些判断是否需要创建索引的指导原则: 1. 查询频率:如果某个列经常被用于查询条件,那么为该列创建索引可能是有益的。例如,如果一个表中的"姓名"列经常被用于查询,那么为该列创建索引可以加快查询速度。 2. 数据唯一性:如果某个列包含大量重复值,那么为该列创建索引可能不会带来很大的性能提升。相反,如果某个列的值几乎都是唯一的,那么为该列创建索引可能会显著提高查询性能。 3. 表大小:对于小型表,即使没有索引,查询性能可能也不错。然而,对于大型表,创建适当的索引可以极大地提高查询效率。 4. 数据修改频率:如果某个表的数据频繁进行插入、更新和删除操作,那么创建过多的索引可能会导致性能下降。因为每次修改数据时,还需要更新索引。 5. 查询复杂性:如果查询涉及多个表之间的连接和复杂的条件,那么创建适当的索引可以加快查询速度。 总之,确定是否需要创建索引需要综合考虑多个因素。在设计数据库时,我们应该根据具体情况权衡利弊,并选择合适的索引策略来提高查询性能。

我一直在我们的MS SQL数据库上运行一个自动索引工具(我修改了一个来自Microsoft的脚本,它查看索引统计表 - Automated Auto Indexing)。根据统计数据,我现在有一个需要创建索引的建议列表。 编辑:上述索引获取了DMV的信息,告诉您如果可用,数据库引擎将使用哪些...

92得票4回答
PostgreSQL 中的视图是否会影响性能?

以下是一本关于数据库设计的书籍(《Beginning Database Design ISBN: 0-7645-7490-6》)的摘录: 使用视图的危险在于对视图进行查询过滤,期望读取非常大表的一个很小部分。任何过滤都应该在视图内完成,因为对视图本身进行过滤是在视图查询执行完成后应用的。视图...

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...

66得票3回答
何时在MySQL中使用视图?

在进行分析时,当从多个连接创建表格时,何时更倾向于使用视图而不是创建新表? 我更喜欢使用视图的一个原因是数据库架构是由我们的管理员在Ruby中开发的,而我对Ruby不熟悉。我可以请求创建表格,但这需要额外的步骤,并且在开发/测试新的连接时,我希望有更多的灵活性。 我开始使用视图是根据SO上...

47得票2回答
如何在PostgreSQL中分割现有表?

我想按日期范围对一个拥有100万行以上的表进行分区。如何在不需要太多停机时间或者冒失丢失数据的情况下完成这个任务?以下是我考虑的策略,但我也愿意听取建议: 1. 现有表作为主表,子表从主表继承。随着时间推移,将数据从主表转移到子表,但在某段时间内,部分数据会存在于主表中,而另一部分数据则存在...

40得票1回答
在某些情况下,在JOIN子句中使用CONSTRUCT会引入优化障碍。

有人提醒我,在SELECT查询的FROM子句中使用USING(而不是ON)可能会在某些情况下引入优化障碍。 我的意思是这个关键词: SELECT * FROM a JOIN b USING (a_id) 只是在更复杂的情况下才会出现。 背景:此评论针对此问题。 我经常使用...

40得票3回答
在使用 WHERE IN 进行删除操作期间出现意外的扫描。

我有一个类似以下的问题: DELETE FROM tblFEStatsBrowsers WHERE BrowserID NOT IN ( SELECT DISTINCT BrowserID FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE Br...

39得票5回答
在WHERE子句中,逻辑运算符OR和AND用于条件的判断和排序。

让我们来审视这两个陈述: IF (CONDITION 1) OR (CONDITION 2) ... IF (CONDITION 3) AND (CONDITION 4) ... 如果条件 1为TRUE,那么会检查条件 2吗? 如果条件 3为FALSE,那么会检查条件 4吗? 对于W...