CREATE TABLE IF NOT EXISTS schema1.table1
(
ID bigint NOT NULL,
eid bigint NOT NULL,
sID bigint,
oname character varying COLLATE pg_catalog."default" NOT NULL,
obtype integer NOT NULL,
parentid bigint,
pageorder integer,
obsubtype integer NOT NULL DEFAULT 0,
pstate integer NOT NULL DEFAULT 1,
lastmodifieddate timestamp without time zone,
lastmodifiedbyid bigint,
vstype integer,
opath character varying COLLATE pg_catalog."default",
arc boolean,
folder boolean,
fcategory bigint NOT NULL DEFAULT 915,
imotype boolean,
iostype boolean,
isemailmsg boolean NOT NULL DEFAULT false,
iher character varying COLLATE pg_catalog."default",
realpathoffset integer,
carvers0 bigint,
carvers1 bigint,
arctype boolean,
icont boolean,
email boolean,
emailattach boolean,
etype boolean,
hofamilyid bigint,
indstate integer NOT NULL DEFAULT 0,
logicalsize bigint,
addescription character varying COLLATE pg_catalog."default",
ouid uuid DEFAULT uuid_generate_v1(),
hperror boolean,
pdescrip character varying COLLATE pg_catalog."default",
CONSTRAINT pk_table1 PRIMARY KEY (ID),
CONSTRAINT omp_o_omp_e FOREIGN KEY (eid)
REFERENCES schema1.table2 (eid) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE CASCADE
)
```WITH (```
``` FILLFACTOR = 30,```
``` autovacuum_analyze_scale_factor = 0,```
``` autovacuum_analyze_threshold = 10000,```
``` autovacuum_vacuum_scale_factor = 0,```
``` autovacuum_vacuum_threshold = 10000```
```)```
```TABLESPACE schema1_ts;```
ALTER TABLE IF EXISTS schema1.table1
OWNER to schema1;
```ALTER TABLE IF EXISTS schema1.table1```
``` ALTER COLUMN fcategory SET STATISTICS 10000;```
2条答案
按热度按时间7xllpg7q1#
是的,您可以为这种情况创建复合索引或位图索引,甚至是覆盖索引。
1.综合指数:
CREATE INDEX IF NOT EXISTS composite_index ON schema1.table1(folder,email);
1.位图索引:
CREATE BITMAP INDEX IF NOT EXISTS bitmap_index ON schema1.table1(folder,email);
在这种情况下,使用复合索引比使用位图索引有几个优点:
1.性能:对于多列查询,复合索引通常比位图索引更有效。这是因为复合索引可用于查找满足索引中所有列的条件的行。另一方面,位图索引只能用于查找与单个列的条件匹配的行。
1.空间:复合索引比位图索引占用更少的空间。这是因为复合索引只存储索引中列的值,而位图索引存储表中所有列的值。
1.易用性:复合索引比位图索引更易于使用。这是因为复合索引可以与标准SQL查询一起使用,而位图索引需要特殊查询。
1.在您的例子中,由于您有一个包含1000万条记录的大表,并且两个布尔列具有50%的true和50%的false值,因此我建议使用复合索引。这将提高查询的性能并使数据库更高效。
但是,使用综合指数也有一些缺点:
1.复杂度:复合索引的创建和维护可能比单列索引更复杂。
1.空间:复合索引比单列索引占用更多的空间。
ecr0jaav2#
创建复合索引后,我可以看到查询性能的差异。谢谢你的帮助。