PolarDB PostgreSQL版(兼容Oracle)提供了Ganos并行创建空间索引功能,本功能采用空间排序(GiST Sort)的方法,可将索引构建过程并行化,并大幅减少磁盘的读写操作,实现索引构建加速,您可通过本章节的内容体验千万级时空数据创建空间索引加速的过程。

背景信息

PostgreSQL数据库非常适合用来存储管理空间数据,然而随着数据量的日益增长,性能问题也日益明显,当数据量达到千万级规模时,创建空间索引耗时会比较长。

前提条件

  • 拥有阿里云账号
  • 已创建PolarDB PostgreSQL版(兼容Oracle)集群,本章节以4核16 GB的PolarDB PostgreSQL版(兼容Oracle)集群为例。

注意事项

空间排序方法仅适用于点数据(Point),其他空间类型的数据使用此方法将会降低索引的查询性能。

操作步骤

  1. 创建时空扩展并生成测试数据。
    1. PolarDB PostgreSQL版(兼容Oracle)集群中,创建数据库。
    2. 使用pgAdmin连接数据库。
    3. 执行以下命令,创建Ganos时空扩展。
      create extension ganos_geometry cascade;
    4. 执行以下命令,生成测试数据。
      CREATE TABLE test (id int, geom Geometry(Point, 4326), name text, code int);
      INSERT INTO test SELECT i,
                      ST_SetSRID(ST_MakePoint(random() * 180.0, random() * 90.0), 4326),
                      'text', 1
                      FROM generate_series(1,1000 * 10000) AS i;
  2. 传统方法创建空间索引。
    执行以下命令,创建空间索引。
    select now();
    CREATE index ON test using GiST(geom);
    select now();
    耗时统计:
    330.10 S
  3. 使用Ganos并行创建空间索引。
    执行以下命令,使用Ganos并行创建空间索引。
    set max_parallel_maintenance_workers=4;
    set maintenance_work_mem='1GB';
    set polar_enable_gist_sort= on;
    
    select now();
    CREATE index on test using GiST(geom);
    select now();
    耗时统计:
    33.54 S

结论

使用Ganos并行创建空间索引,耗时比传统方法创建空间索引提升了10倍左右。