天天看點

PostgreSQL開發小講堂 - 不等于、數組不包含 要不要用索引?

postgresql , 不等于 , 索引 , 外連接配接

在資料庫中不等于能不能走索引呢?理論上是不行的,但是有方法可以讓不等于也走索引(雖然走索引也不一定好)。

比如使用外連接配接實作(需要表有pk才行,沒有pk可以使用行号代替),或者使用not exists,或者使用partial index(不支援變量)。

對于傳回結果集很大的場景,建議使用遊标分頁傳回,此時可能用全表掃描更适合。

原始方法,不能走索引

select * from tbl_pk where c1 <> 1;

postgres=# explain (analyze,verbose,timing,costs,buffers) select * from tbl_pk where c1 <> 1;

seq scan on public.tbl_pk (cost=0.00..16925.00 rows=999902 width=8) (actual time=0.020..182.603 rows=999919 loops=1)

output: id, c1

filter: (tbl_pk.c1 <> 1)

rows removed by filter: 81

buffers: shared hit=4425

planning time: 0.486 ms

execution time: 249.335 ms

(7 rows)

讓他走索引的寫法

沒有pk時,可以使用行号進行關聯。

繼續閱讀