第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

PostgreSQL索引數(shù)組列可以嗎?

PostgreSQL索引數(shù)組列可以嗎?

四季花海 2019-07-20 10:42:02
PostgreSQL索引數(shù)組列可以嗎?我在文件中找不到這個(gè)問題的確切答案。如果列是數(shù)組類型,那么所有輸入的值都會(huì)被單獨(dú)索引嗎?我創(chuàng)建了一個(gè)簡單的表int[]列,并在其上添加唯一的索引。我注意到我無法添加相同的INT數(shù)組,這使我相信索引是數(shù)組項(xiàng)的組合,而不是每個(gè)項(xiàng)的索引。INSERT INTO "Test"."Test" VALUES ('{10, 15, 20}');INSERT INTO "Test"."Test" VALUES ('{10, 20, 30}');SELECT * FROM "Test"."Test" WHERE 20 = ANY ("Column1");索引對(duì)此查詢有幫助嗎?
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

是的,可以索引數(shù)組,但必須使用數(shù)組運(yùn)算符GIN索引類型.

例子:

    CREATE TABLE "Test"("Column1" int[]);
    INSERT INTO "Test" VALUES ('{10, 15, 20}');
    INSERT INTO "Test" VALUES ('{10, 20, 30}');

    CREATE INDEX idx_test on "Test" USING GIN ("Column1");

    -- To enforce index usage because we have only 2 records for this test... 
    SET enable_seqscan TO off;

    EXPLAIN ANALYZE    SELECT * FROM "Test" WHERE "Column1" @> ARRAY[20];

結(jié)果:

Bitmap Heap Scan on "Test"  (cost=4.26..8.27 rows=1 width=32) (actual time=0.014..0.015 rows=2 loops=1)
  Recheck Cond: ("Column1" @> '{20}'::integer[])
  ->  Bitmap Index Scan on idx_test  (cost=0.00..4.26 rows=1 width=0) (actual time=0.009..0.009 rows=2 loops=1)
        Index Cond: ("Column1" @> '{20}'::integer[])Total runtime: 0.062 ms

似乎在許多情況下杜松子酒需要選擇

create index <index_name> on <table_name> using GIN (<column> gin__int_ops)

我還沒有見過在不使用gin_INT_OPS選項(xiàng)的情況下與&and@>操作符一起工作的情況。


查看完整回答
反對(duì) 回復(fù) 2019-07-20
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

要用數(shù)組運(yùn)算符,也就是仍然正確給Postgres 11號(hào)。手冊(cè):

..PostgreSQL的標(biāo)準(zhǔn)發(fā)行版包括一個(gè)用于數(shù)組的GIN運(yùn)算符類,它支持使用以下操作符進(jìn)行索引查詢:

<@@>=&&

標(biāo)準(zhǔn)發(fā)行版中GIN索引的內(nèi)置操作符類的完整列表在這里。

在Postgres索引綁定到運(yùn)算符。(它是為某些類型實(shí)現(xiàn)的),而不是單獨(dú)的數(shù)據(jù)類型或函數(shù)或其他任何東西。那是從最初的伯克利設(shè)計(jì)中繼承的Postgres現(xiàn)在很難改變。一般情況下都很好。下面是pgsql-bug上的一個(gè)線程,TomLane對(duì)此進(jìn)行了評(píng)論。

一些PostGis功能(比如ST_DWithin())似乎違反了這個(gè)原則,但事實(shí)并非如此。這些函數(shù)在內(nèi)部重寫以使用各自的操作者.

索引表達(dá)式必須位于左邊接線員。對(duì)于大多數(shù)運(yùn)營商(包括上述所有)如果將索引表達(dá)式放置在右側(cè),則查詢計(jì)劃器可以通過翻轉(zhuǎn)操作數(shù)來實(shí)現(xiàn)這一點(diǎn)。COMMUTATOR已經(jīng)被定義了。這個(gè)ANY構(gòu)造可以與各種操作符結(jié)合使用,而不是操作符本身。當(dāng)用作constant = ANY (array_expression)只支持=操作員開啟陣列元件我們需要一個(gè)交換器= ANY()..杜松子酒指數(shù)出來了。

Postgres目前還不夠聰明,無法從它派生出一個(gè)GIN-索引表達(dá)式。首先,constant = ANY (array_expression)不完全等價(jià)array_expression @> ARRAY[constant]..數(shù)組運(yùn)算符返回錯(cuò)誤(如果任何NULL)。元素參與其中,而ANY構(gòu)造可以在任何一方處理NULL。對(duì)于數(shù)據(jù)類型的不匹配,有不同的結(jié)果。

有關(guān)答復(fù):

旁白

在工作中integer陣列 (int4,不是int2int8)沒有NULL值(如示例所示)考慮附加模塊intarray,這提供了專門的、更快的操作符和索引支持。見:

至于UNIQUE問題中未回答的約束:該約束是用btree索引實(shí)現(xiàn)的。全陣值(就像您所懷疑的那樣),并且無助于搜索元素完全沒有。詳情:


查看完整回答
反對(duì) 回復(fù) 2019-07-20
?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

現(xiàn)在可以對(duì)單個(gè)數(shù)組元素進(jìn)行索引。例如:


CREATE TABLE test (foo int[]);

INSERT INTO test VALUES ('{1,2,3}');

INSERT INTO test VALUES ('{4,5,6}');

CREATE INDEX test_index on test ((foo[1]));

SET enable_seqscan TO off;


EXPLAIN ANALYZE SELECT * from test WHERE foo[1]=1;

                                                QUERY PLAN                                                    

------------------------------------------------------------------------------------------------------------------

 Index Scan using test_index on test  (cost=0.00..8.27 rows=1 width=32) (actual   time=0.070..0.071 rows=1 loops=1)

   Index Cond: (foo[1] = 1)

 Total runtime: 0.112 ms

(3 rows)

這至少適用于Postgres 9.2.1。注意,您需要為每個(gè)數(shù)組索引構(gòu)建一個(gè)單獨(dú)的索引,在我的示例中,我只對(duì)第一個(gè)元素進(jìn)行了索引。


查看完整回答
反對(duì) 回復(fù) 2019-07-20
  • 3 回答
  • 0 關(guān)注
  • 1536 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)