当我在db2上创建索引时,例如使用以下代码:
CREATE INDEX T_IDX ON T(
A,
B)
是综合指数吗? 如果不是:我怎么能创建一个复合索引? 如果是:为了有两个不同的索引,我应该单独创建它们:
CREATE INDEX T1_IDX ON T(A)
CREATE INDEX T2_IDX ON T(A)
编辑:这个讨论不是朝着我期望的方向发展(但是更好的方向:) :)我实际上问了怎么,而不是为什么要创建单独的索引,我计划在另一个问题中这样做,但是因为你期待我:
假设我有一个表T(A,B,C)和一个搜索函数search(),可以使用以下任何一种方法从表中选择
WHERE A = x
WHERE B = x
WHERE C = x
WHERE A = x AND B=y (and so on AC, CB, ABC)
如果我创建一个撰写索引ABC,它是否会在我选择C时才能工作? 该表非常大,而且插入\更新不那么频繁
答案 0 :(得分:2)
根据定义,创建索引=复合的多个字段:指定两个或多个列名称以创建复合索引。
了解何时使用复合索引似乎是您的最后一个问题...
如果查询选择的所有列都在复合索引中,则dbengine可以从索引返回这些值而无需访问该表。所以你有更快的寻找时间。
但是,如果在查询中使用了一个或另一个,那么创建单个索引将为您提供最佳服务。这取决于执行的查询类型以及它们包含/过滤/加入的值。
如果您有时拥有一个,另一个或两者,那么创建所有3个索引也是可能的。但请记住,每增加一个索引会增加插入,更新或删除所需的时间,因此在高度维护的表中,由于维护索引的开销会影响性能,因此更多索引通常会很糟糕。
答案 1 :(得分:0)
第一个答案:是
CREATE INDEX JOB_BY_DPT
ON EMPLOYEE (WORKDEPT, JOB)
第二回答:
这取决于您的查询;如果大多数时候你的查询引用where子句中的单个列,如select * from T where A = 'something'
那么单个索引就是你想要的,但如果A和B列都被引用,那么你应该去创建一个复合索引。
如需进一步参考,请查看
答案 2 :(得分:0)
A,B上的索引是一个复合索引,当然可用于在A上寻找或在A上寻找B或进行一般扫描。
A,B上的索引和A上的索引通常没什么意义,因为如果你只有A,可以使用A,B的部分搜索。那个更宽的索引会有点然而,效率较低,因此如果A查找非常频繁并且写入要求意味着更新额外索引是可以接受的,那么它可能是合理的。
在B上有索引可能是必要的,因为A,B索引不太适合仅基于B的搜索。