Oracle SQL:具有两列的单个索引与一列上的索引
Oracle SQL: Single Index with two Columns vs index on one Column
我正在使用 Oracle12c
我有一个带有主键和单独列的 table。
create tableB(
ID number(10)
,data number(10)
);
ID 是我的主键。
我必须在我的查询中加入 3 个 table,性能问题是 B.data 没有索引。
B.data 包含 'null' 个值和相同数字的多个条目。
select A.examp from tabled D
join tableb B on D.data = B.data
join tablec C on B.ID = C.ID
join tablea A on C.val = A.val
where D.ID = :value;
所以我的问题是像数据列这样只包含一个值的索引有什么区别
create index ind_tableb on tableb (data);
和一个包含多列的索引,如
create index ind_tableb on tableb (data, id);
我可以通过以连接列的方式选择索引中的 id 和数据来获得改进吗?
感谢您的建议和帮助。
对于这个特定的查询,您需要两列索引版本:
create index ind_tableb on tableb (data, id);
如果使用上述索引,Oracle 可以快速查找 tabled.data
值以寻找与 tableb.data
值的潜在匹配项。如果找到匹配项,则相同的索引也将包含 tableb.ID
的下一个连接值 tablec
。如果您仅在 tableb.data
上单独使用单列版本,那么 Oracle 将不得不返回 tableb
table 来查找 ID
值。这可能会影响性能,甚至可能导致索引无法使用。
我正在使用 Oracle12c
我有一个带有主键和单独列的 table。
create tableB(
ID number(10)
,data number(10)
);
ID 是我的主键。
我必须在我的查询中加入 3 个 table,性能问题是 B.data 没有索引。 B.data 包含 'null' 个值和相同数字的多个条目。
select A.examp from tabled D
join tableb B on D.data = B.data
join tablec C on B.ID = C.ID
join tablea A on C.val = A.val
where D.ID = :value;
所以我的问题是像数据列这样只包含一个值的索引有什么区别
create index ind_tableb on tableb (data);
和一个包含多列的索引,如
create index ind_tableb on tableb (data, id);
我可以通过以连接列的方式选择索引中的 id 和数据来获得改进吗?
感谢您的建议和帮助。
对于这个特定的查询,您需要两列索引版本:
create index ind_tableb on tableb (data, id);
如果使用上述索引,Oracle 可以快速查找 tabled.data
值以寻找与 tableb.data
值的潜在匹配项。如果找到匹配项,则相同的索引也将包含 tableb.ID
的下一个连接值 tablec
。如果您仅在 tableb.data
上单独使用单列版本,那么 Oracle 将不得不返回 tableb
table 来查找 ID
值。这可能会影响性能,甚至可能导致索引无法使用。