昨天我們談到了索引,今天我們來講講常見的類型吧!
以下是一些常見的索引類型以及其值的儲存方式:
B-Tree 索引:B 代表的是 'blanced',這是最常見的索引類型之一,通常用於數值和字串欄位。B-Tree 索引將欄位的值存儲在一個平衡樹結構中,使得查詢時可以使用二分查詢快速算法。
哈希索引:哈希索引將欄位的值轉換為固定大小的哈希碼,然後使用哈希表來存儲這些哈希碼與實際資料記錄之間的映射關係。哈希索引通常用於等值查詢,但不適用於範圍查詢。
複合索引:複合索引是基於多個欄位的值建立的索引,它可以提供多欄位的查詢支持。索引的值是這些欄位的組合值。
全文本索引:全文本索引用於文字內容的搜索,它將文字拆分成單詞或詞語,然後建立索引以加快全文搜索的速度。
-- 創建 B-Tree 索引
CREATE INDEX idx_last_name ON employees (last_name);
-- 查詢使用索引
SELECT * FROM employees WHERE last_name = 'Smith';
在這個範例中,我們創建了一個名為 idx_last_name 的 B-Tree 索引,用於資料表 employees 的 last_name 欄位。然後,我們可以使用這個索引來執行等值查詢以快速找到姓氏為 "Smith" 的員工記錄。
-- 創建哈希索引
CREATE INDEX idx_email_hash ON users USING hash (email);
-- 查詢使用哈希索引
SELECT * FROM users WHERE email = 'example@email.com';
在這個範例中,我們創建了一個哈希索引 idx_email_hash,使用 hash 函數處理 users 資料表中的 email 欄位。哈希索引將 email 值轉換為哈希碼,然後用於執行等值查詢。
-- 創建複合索引
CREATE INDEX idx_first_last_name ON employees (first_name, last_name);
-- 查詢使用複合索引
SELECT * FROM employees WHERE first_name = 'John' AND last_name = 'Doe';
在這個範例中,我們創建了一個複合索引 idx_first_last_name,用於 employees 資料表的 first_name 和 last_name 欄位。這個複合索引可以用於支援同時使用 first_name 和 last_name 的等值查詢。
-- 創建全文本索引
CREATE INDEX idx_fulltext_content ON articles USING gin (to_tsvector('english', content));
-- 查詢使用全文本索引
SELECT * FROM articles WHERE to_tsvector('english', content) @@ to_tsquery('english', 'search term');
在這個範例中,我們創建了一個全文本索引 idx_fulltext_content,用於 articles 資料表的 content 欄位。這個全文本索引可以用於全文搜索,使用 to_tsvector 函數將文本轉換為向量,然後使用 to_tsquery 函數執行全文搜索。
參考網站:
https://www.sentryone.com/blog/introduction-to-b-tree-and-hash-indexes-in-postgresql
https://www.scaler.com/topics/b-tree-in-dbms/