这是一个简短的例子。我意识到我不能为每个可能的场景创建索引,但是如果我想将数据仓库降低到每个表的3-4个索引,下面是一个示例问题。
如果我有一个包含Product、ZipCode、DatePurchased和其他50列的表。*如果用户有时想通过产品进行查询,*有时通过Product&State*,有时通过DatePurchased *,有时只通过状态查询。
我需要为这4种情况建立索引吗?或者我可以做一个索引并包含所有4列,Oracle会看到我只要求where子句中的一个或两个字段?
尤其是Product&State,我是否建立了一个索引并同时包含了这两个列?如果where子句只有Product,那么它会达到这个索引吗?或者,如果我只想要状态,它会达到这个指数吗?还是需要一个单独的索引,一个用于Product,一个用于state,另一个用于Product&State合并?
发布于 2015-11-24 17:12:58
我可能会为以下列创建索引:
关于最后一个问题;如果表很大或将要变大,我将在DatePurchased列上进行分区,这样,在查询DatePurchased时,您就可以获得分区修剪的好处,而且您可能不需要单独的索引。
和所有东西一样,您应该用表和数据来测试它!
发布于 2015-11-24 16:44:48
我尽量保持简单,并根据需要进行调整。因为您知道用户将按产品、状态和数据搜索进行查询,所以在这3列中的每一列上都设置一个索引。它也应该有助于产品/状态的情况。如果您从经验上发现产品/状态案例需要改进,那么添加它。顺便说一句,额外的索引会减慢插入速度,但不应该对查询产生负面影响。
发布于 2015-11-24 22:30:42
为下列列创建索引:
产品
DatePurchased
以及对国家的分割。
研究一些关于用户查询(或您自己的测试SQL)的解释计划,以查看索引是否被正确使用。
此外,对Bitmap和B-Tree索引进行实验,因为这些索引在数据仓库环境中是常见的和有用的。
HTH
https://stackoverflow.com/questions/33898877
复制相似问题