在 Postgres Aurora 上使用索引和散列分区的 DDL
DDL with Index and Hash Partition on Postgres Aurora
您好,我正在尝试在 OBJECT_ID 上使用散列分区在 PostgreSQL Aurora 中创建 DDL。
我还想在 CUSTOMER_ID,OBJECT_TYPE,OBJECT_ID,PT_EVENT_ID
上创建一个索引
CREATE TABLE event_test(
ID varchar(255) PRIMARY KEY NOT NULL,
VERSION int(11) NOT NULL,
ORDER_TYPE varchar(255) NOT NULL,
EVENT_TYPE varchar(255) NOT NULL,
CUSTOMER_ID varchar(255) DEFAULT NULL,
DETAILS text,
OBJECT_TYPE varchar(255) NOT NULL,
UTC_DATE_TIME date DEFAULT NULL,
EVENT_TO_UTC_DT date DEFAULT NULL,
GROUP_ID varchar(255) DEFAULT NULL,
OBJECT_NAME varchar(2001) DEFAULT NULL,
OBJECT_ID varchar(255) DEFAULT NULL,
USER_NAME varchar(1500) DEFAULT NULL,
USER_ID varchar(255) DEFAULT NULL,
PT_EVENT_ID varchar(255) DEFAULT NULL,
CUSTOM_NOTES varchar(1000) DEFAULT NULL,
SUMMARY varchar(4000) DEFAULT NULL
);
有人可以帮我处理 DDL 吗?
如果所有这些 ID 实际上都是 UUID,则应使用 uuid
类型定义列。
所谓的“神奇”限制 255 并没有启用某些隐藏的性能或存储优化(至少在 Postgres 中)。所以盲目地使用 varchar(255)
并没有真正的意义(当然,如果您有一个有效的业务要求 order_type
或 event_type
的值可能永远不会超过 255 个字符,那么当然保持该约束。
As documented in the manual integer
数据类型也没有“长度”参数(并且它也不是 MySQL 中的值限制,所以开始时几乎没有用).
所以 DDL 应该是这样的:
CREATE TABLE event_test(
ID uuid PRIMARY KEY NOT NULL,
VERSION integer NOT NULL,
ORDER_TYPE varchar(255) NOT NULL,
EVENT_TYPE varchar(255) NOT NULL,
CUSTOMER_ID uuid DEFAULT NULL,
DETAILS text,
OBJECT_TYPE varchar(255) NOT NULL,
UTC_DATE_TIME date DEFAULT NULL,
EVENT_TO_UTC_DT date DEFAULT NULL,
GROUP_ID uuid DEFAULT NULL,
OBJECT_NAME varchar(2001) DEFAULT NULL,
OBJECT_ID uuid DEFAULT NULL,
USER_NAME varchar(1500) DEFAULT NULL,
USER_ID uuid DEFAULT NULL,
PT_EVENT_ID uuid DEFAULT NULL,
CUSTOM_NOTES varchar(1000) DEFAULT NULL,
SUMMARY varchar(4000) DEFAULT NULL
);
要创建索引,请使用 create index:
create index on event_test (customer_id,object_type,object_id,pt_event_id);
如果“您的大部分访问”是通过 object_id
进行的,那么您需要一个作为前导列的索引:
create index on event_test (object_id);
哈希分区不会真正帮助您加快速度。
您可以对table使用分区,但这几乎不是性能工具。由于 Postgres 分区实现的限制,如果您想将 id
列作为主键,您也将被迫在分区键中包含该列。但是考虑到您的声明“大多数访问是通过 object_id
进行的,分区键 (id, object_id)
根本帮不了您。
您好,我正在尝试在 OBJECT_ID 上使用散列分区在 PostgreSQL Aurora 中创建 DDL。
我还想在 CUSTOMER_ID,OBJECT_TYPE,OBJECT_ID,PT_EVENT_ID
CREATE TABLE event_test(
ID varchar(255) PRIMARY KEY NOT NULL,
VERSION int(11) NOT NULL,
ORDER_TYPE varchar(255) NOT NULL,
EVENT_TYPE varchar(255) NOT NULL,
CUSTOMER_ID varchar(255) DEFAULT NULL,
DETAILS text,
OBJECT_TYPE varchar(255) NOT NULL,
UTC_DATE_TIME date DEFAULT NULL,
EVENT_TO_UTC_DT date DEFAULT NULL,
GROUP_ID varchar(255) DEFAULT NULL,
OBJECT_NAME varchar(2001) DEFAULT NULL,
OBJECT_ID varchar(255) DEFAULT NULL,
USER_NAME varchar(1500) DEFAULT NULL,
USER_ID varchar(255) DEFAULT NULL,
PT_EVENT_ID varchar(255) DEFAULT NULL,
CUSTOM_NOTES varchar(1000) DEFAULT NULL,
SUMMARY varchar(4000) DEFAULT NULL
);
有人可以帮我处理 DDL 吗?
如果所有这些 ID 实际上都是 UUID,则应使用 uuid
类型定义列。
所谓的“神奇”限制 255 并没有启用某些隐藏的性能或存储优化(至少在 Postgres 中)。所以盲目地使用 varchar(255)
并没有真正的意义(当然,如果您有一个有效的业务要求 order_type
或 event_type
的值可能永远不会超过 255 个字符,那么当然保持该约束。
As documented in the manual integer
数据类型也没有“长度”参数(并且它也不是 MySQL 中的值限制,所以开始时几乎没有用).
所以 DDL 应该是这样的:
CREATE TABLE event_test(
ID uuid PRIMARY KEY NOT NULL,
VERSION integer NOT NULL,
ORDER_TYPE varchar(255) NOT NULL,
EVENT_TYPE varchar(255) NOT NULL,
CUSTOMER_ID uuid DEFAULT NULL,
DETAILS text,
OBJECT_TYPE varchar(255) NOT NULL,
UTC_DATE_TIME date DEFAULT NULL,
EVENT_TO_UTC_DT date DEFAULT NULL,
GROUP_ID uuid DEFAULT NULL,
OBJECT_NAME varchar(2001) DEFAULT NULL,
OBJECT_ID uuid DEFAULT NULL,
USER_NAME varchar(1500) DEFAULT NULL,
USER_ID uuid DEFAULT NULL,
PT_EVENT_ID uuid DEFAULT NULL,
CUSTOM_NOTES varchar(1000) DEFAULT NULL,
SUMMARY varchar(4000) DEFAULT NULL
);
要创建索引,请使用 create index:
create index on event_test (customer_id,object_type,object_id,pt_event_id);
如果“您的大部分访问”是通过 object_id
进行的,那么您需要一个作为前导列的索引:
create index on event_test (object_id);
哈希分区不会真正帮助您加快速度。
您可以对table使用分区,但这几乎不是性能工具。由于 Postgres 分区实现的限制,如果您想将 id
列作为主键,您也将被迫在分区键中包含该列。但是考虑到您的声明“大多数访问是通过 object_id
进行的,分区键 (id, object_id)
根本帮不了您。