postgresql实现了多表索引吗?

kg7wmglp  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(449)

我已经找了一个星期了,恐怕这个可能还不存在。我想在postgresql中使用一个跨多个表的索引。oracle和sqlserver似乎实现了它们(或多或少有一些选择)。
它对于我需要实现的一些搜索可能非常有用。
以下是针对oracle和sql server的多表索引示例,以供参考:
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 server示例
sql server可以创建索引视图:

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';
wmtdaxz3

wmtdaxz31#

在当前版本的postgresql(v12)中,索引只能基于表或物化视图。
https://www.postgresql.org/docs/current/sql-createindex.html
create index在指定关系的指定列上构造索引,该列可以是表或物化视图。
这个 CREATE INDEX 语法需要一个表,并且只能指定一个表
在[only]表\u name[using method]上创建[unique]索引[concurrently][[if not exists]name]
表格名称:
要编制索引的表的名称(可能是架构限定的)。
物化视图是一个选项,但是,在刷新数据之前,物化视图中的数据是过时的。
https://www.postgresql.org/docs/12/sql-creatematerializedview.html
创建物化视图定义查询的物化视图。执行查询并用于在发出命令时填充视图(除非使用with no data),以后可以使用refresh materialized view进行刷新。
你也许可以通过自动化一个进程来平衡它 REFRESH MATERIALIZED VIEW 命令以减少过时数据的可能性。例如,在导入大量数据之后,以及在其他时间以固定的间隔。但是,如果您的数据足够大,需要建立索引,那么刷新和重新建立索引的过程将不够快,因此您将无法在oltp场景中的每个crud语句之后执行它。
总之,您要查找的内容在12版后的postgresql中并不存在。

相关问题