sqlCREATE TABLE employee ( empname CHARACTER VARYING COLLATE C empid BIGINT empsalary BIGINT empdept CHARACTER VARYING empdoj DATE emplwd DATE empage INTEGER empcities TEXT empaddresshist JSONB empcitylist TEXT[] emptenure TSRANGE )
INSERT INTO employeeSELECTsubstr(REPEAT(abexoptkhngsadl3)((random()(301)1)integer)5) AS empnameI AS empidTRUNC(RANDOM() 10000) AS empsalaryUPPER(substr(REPEAT(REVERSE(abexoptkhngsadl)3)((random()(301)1)integer)4)) AS empdept 1/1/2016DATE (1 YEARINTERVAL FLOOR(RANDOM()5)) AS empdoj 1/1/2020DATE (2 YEARINTERVAL FLOOR(RANDOM()6)) AS emplwdfloor(random() (39301) 30)int AS empageCITYICITYXCITYI2 AS empcitiesTOJSONB(ROW(ITEXT CITYICITYXCITYI2)) AS empaddresshistARRAY[CONCATWS(CITYI)CITYXCONCATWS(CITYI2)] AS empcitylist([2015I12I30 2017I12I30))TSRANGE AS emptenureFROM GENERATESERIES(1 5000000) AS IWHERE i12 BETWEEN 1 AND 13 AND i30 BETWEEN 1 AND 28
sqlEXPLAIN ANALYZE SELECT jsonbpretty(empaddresshist) FROM employee WHERE empaddresshist @gt {f2 city4cityXcity0}
现在,我们在 empaddresshist 列上创建一个 GIN 索引并重新执行相同的查询:
sqlCREATE INDEX idxempginjsonb ON employee USING gin(empaddresshist)EXPLAIN ANALYZE SELECT jsonbpretty(empaddresshist) FROM employee WHERE empaddresshist @gt {f2 city4cityXcity0}
sqlEXPLAIN ANALYZE SELECT FROM employee WHERE totsvector(englishempcities) @@ totsquery(englishcity4 amp city0)CREATE INDEX idxempgistfts ON employee USING GIST (totsvector(english empcities))EXPLAIN ANALYZE SELECT FROM employee WHERE totsvector(englishempcities) @@ totsquery(englishcity4 amp city0)
sqlEXPLAIN ANALYZE SELECT FROM employee WHERE emptenure ampamp [20190101 20190401)CREATE index idxempgisttenurerange on employee USING GIST(emptenure)EXPLAIN ANALYZE SELECT FROM employee WHERE emptenure ampamp [20190101 20190401)
sqlCREATE TYPE comptype AS (id1 int id2 int)CREATE TABLE idxdemotable (sn INT ids comptype[])INSERT INTO idxdemotable SELECT i ARRAY[(ii)comptype]FROM generateseries(11000000)i
EXPLAIN ANALYZE SELECT FROM idxdemotable WHERE ids = ARRAY[(1515)comptype]