必須了解的PostgreSQL索引知識

2021-10-18 13:15:58 字數 2275 閱讀 4702

create index index_name 

on table_name (expression);

一旦有了函式索引,當定義的表示式出現在where或order by子句中,postgresql會使用函式索引。需要提醒的是,表示式索引維護成本較高,當插入或更新記錄時都需要評估表示式更新索引資訊。只有當查詢效能比插入和更新更重要時才應該使用。

示例表:customer(customer_id,first_name,last_name,email,address_id,create_date,last_update,active),我們在last_name上定義索引idx_last_name。則下面語句會使用索引。

explain

select

customer_id,

first_name,

last_name

from

customer

where

last_name = 'purdy';

但是下面語句不會使用上面定義的索引:

explain

select

customer_id,

first_name,

last_name

from

customer

where

lower(last_name) = 'purdy'; -- 因為欄位上使用了函式

這時可以定義函式索引:

create index idx_ic_last_name

on customer(lower(last_name));

這時就可以利用索引了。

組合字段索引最多支援32列,該引數可以在構建postgresql時修改pg_config_manual.h檔案。組合索引僅支援b-tree, gist, gin, brin型別索引。語法如下:

create index index_name

on table_name(a,b,c,...);

在定義組合索引時,應該將經常在where子句中使用的列放在前面,將不太經常在條件的字段放在後面。對於上面的組合索引,下面語句可以利用索引:

where a = v1 and b = v2 and c = v3;

-- 或者

where a = v1 and b = v2;

-- 或者

where a = v1;

但下面查詢語句不能使用到組合索引:

where  c = v3;

-- 或者

where b = v2 and c = v3;

可以參考上篇postgresql 區域性索引(partial index)教程。

在實踐中,由於硬體故障或軟體bug,索引可能會損壞,不再包含有效資料。語法如下:

reindex [ ( verbose ) ]  name;
verbose是可選的,包括verbose時,語句顯示每個索引重建的進度報告。

重建單個索引,可以使用下面語句:

reindex index index_name;
為了重建表上的所有索引,語法如下:

reindex table table_name;
重建schema下的所有索引,語法:

reindex schema schema_name;
重建資料庫上的所有索引,語法:

reindex database database_name;
下面語句重建系統目錄的索引:

reindex system database_name;
重建索引即從頭開始重新索引內容,與刪除索引再重新建立索引效果類似。但在鎖機制上有差異。

有寫鎖,但沒有讀鎖。獲取正在處理的索引上的排他鎖,該鎖阻塞試圖使用該索引的讀取操作。

首先drop索引通過獲取表上的排他鎖來鎖定索引所屬的表的寫和讀操作。隨後的create index語句鎖定索引對應表的寫操作,而不是讀操作。然而,在建立索引期間,讀取可能是昂貴的。

本文介紹了索引的一些知識,函式索引、組合索引、區域性索引,以及如何重建索引。了解這些知識可以在實際應用中爭取應用提公升資料庫效能。

CEO必須了解的雲計算

這就像乙個世紀以前,製造業從蒸汽到電力的轉變一樣,既不可避免,也不可扭轉。而且,正如當初那場轉變給工廠業主們帶來了眾多好處並開啟新的機會之門一樣,雲計算也會給使用者帶來許多優勢。雲的四大好處 提高個人生產力全球工程承包商保富的員工在工作中需要和不同的客戶 承包商和質檢員等分享資料,這在雲計算出現之前...

你必須了解Spring的生態

spring不止是提供了ioc aop的功能,還提供了大量的基於spring的專案,拿來用就行了,用於一站式開發,大大降低了開發的難度。下面列舉下主要的一些spring的生態專案 spring boot 一站式快速開發解決專案。spring cloud 提供對分布式系統的支援。spring data...

學習HTML之前必須了解的基礎

帖子包含非法片語,不能發布 一 網路基礎部分 1.1瀏覽器與伺服器 瀏覽器是指可以顯示網頁伺服器或者檔案系統的html檔案 標準通用標記語言的乙個應用 內容,並讓使用者與這些檔案互動的一種軟體。瀏覽器在訪問頁面時通過瀏覽器的核心解析頁面。瀏覽器的核心大致有這麼幾種 ie的trident核心,fire...