gpt4 book ai didi

indexing - Informix 中的组索引

转载 作者:行者123 更新时间:2023-12-02 22:10:38 26 4
gpt4 key购买 nike

我有一个名为 hitlist 的表,它有 3 列:

int id
long hitlisted_date
long deleted_date

我将根据这些列查询该表:

histlisted_date (frequent)
hitlisted_date && deleted_date (frequent)
deleted_date (not frequent)

在这种情况下,我应该使用什么样的索引?

  1. hitlisted_datedeleted_date 的单独索引
  2. hitlisted_datedeleted_date 的组索引

更新

该表只有 1000 - 5000 行。
这些是将要使用的查询模式。

1) hitlisted_date 之间
2) hitlisted_date <
3)deleted_date = -1 和 hitlisted_date <=
4) 删除日期 > 0

对于上述模式,这些索引就足够了吗?

  1. 在 hitlist(hitlisted_date) 上创建索引 i1_hitlist;
  2. 在命中列表上创建索引 i2_hitlist(deleted_date, hitlisted_date);

最佳答案

由于 hitlisted_date 及其组合会被频繁使用,因此您希望在两列上建立一个复合索引,其中 hitlisted_date 首先:

CREATE INDEX i1_hitlist ON hitlist(hitlisted_date, deleted_date);

此索引可以(并且将会)用于对 hitlisted_date 本身或两个日期具有合适条件的查询。

您可能会发现仅在 deleted_date 上建立第二个索引是有益的:

CREATE INDEX i2_hitlist ON hitlist(deleted_date);

这可用于仅搜索deleted_date。如果您有时对单个删除日期和一系列命中列表日期进行搜索,那么您可能会发现使用与 i1_hitlist 相反的复合索引会更好:

CREATE INDEX i2_hitlist ON hitlist(deleted_date, hitlisted_date);

这不太可能有帮助,但唯一确定的方法就是尝试一下看看。这取决于您的查询模式以及查询使用的实际条件。

仅根据 hitlisted_date 建立索引并没有真正的优点;它只会妨碍优化器(因为它必须查看两个索引并决定哪个更好,并且因为插入、更新和删除行时还有更多工作要做)。命中列表日期不太可能是唯一索引。如果可以的话,那么保留单列索引和重复索引就有一个单独的原因。 (另请参阅Is an index on (A,B) redundant if there is an index on (A, B, C)。)

更改索引后,请确保统计信息是最新的(现在或多或少是自动的,但它曾经很重要),然后使用 SET EXPLAIN on 运行查询以检查索引是否正在使用(并且正在使用哪些索引)。

关于indexing - Informix 中的组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13858190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com