DB2 是否实现了 multi-table 索引?

Does DB2 implement multi-table indexes?

恐怕这个功能可能[还]不存在。我想在 DB2 中使用跨越多个 table 的索引。我知道 Oracle 和 SQL 服务器实现了它们(有或多或少的选项),而 PostreSQL 似乎还没有实现它们。

注意:几周前我问过一个关于 PosgreSQL 的类似问题。

多 table 索引对于某些特定查询可能非常有益。

供参考,这里是 Oracle 和 SQL 服务器的 multi-table index 示例:

Oracle 示例

Oracle可以创建位图连接索引,如下图:

create table dealer (
  id int primary key not null,
  city varchar2(20) not null
);

create table car (
  id int primary key not null,
  brand varchar2(20),
  price int,
  dealer_id int references dealer (id)
);

create bitmap index bix1 on car (d.city, c.brand)
from car c, dealer d
where d.id = c.dealer_id;

select avg(c.price)
from dealer d
join car c on c.dealer_id = d.id
where d.city = 'Chicago' and c.brand = 'Buick';

SQL 服务器示例

SQL 服务器可以创建 索引视图:

create table dealer (
  id int primary key not null,
  city varchar(20) not null
);

create table car (
  id int primary key not null,
  brand varchar(20),
  price int,
  dealer_id int references dealer (id)
);

create view v with schemabinding as
select d.city, c.brand, c.price, c.dealer_id
from dbo.dealer d
join dbo.car c on c.dealer_id = d.id;

create unique clustered index uix1 on v (city, brand, price);

select avg(c.price)
from dealer d
join car c on c.dealer_id = d.id
where d.city = 'Chicago' and c.brand = 'Buick';

DB2 中有类似的东西吗?

是的,就像在 SQL 服务器中一样,您可以在跨越多个 table 的视图上创建索引。

注意 -- 您必须以特殊方式设置视图(称为具体化查询 table)才能正常工作。

Db2(适用于 Linux、UNIX 和 Windows)支持 indexes on tables,即您只能索引单个 table.

table 可以是基于视图的 MQT(具体化查询 table)。这与直接索引多个 table 不同。