iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
Software Development

從餐飲業轉職成小白工程師的所見所學系列 第 18

常見的索引類型與使用方式 Day18

  • 分享至 

  • xImage
  •  

昨天我們談到了索引,今天我們來講講常見的類型吧!

以下是一些常見的索引類型以及其值的儲存方式:

  • B-Tree 索引:B 代表的是 'blanced',這是最常見的索引類型之一,通常用於數值和字串欄位。B-Tree 索引將欄位的值存儲在一個平衡樹結構中,使得查詢時可以使用二分查詢快速算法。

  • 哈希索引:哈希索引將欄位的值轉換為固定大小的哈希碼,然後使用哈希表來存儲這些哈希碼與實際資料記錄之間的映射關係。哈希索引通常用於等值查詢,但不適用於範圍查詢。

  • 複合索引:複合索引是基於多個欄位的值建立的索引,它可以提供多欄位的查詢支持。索引的值是這些欄位的組合值。

  • 全文本索引:全文本索引用於文字內容的搜索,它將文字拆分成單詞或詞語,然後建立索引以加快全文搜索的速度。

範例

  1. 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" 的員工記錄。

  1. Hash
-- 創建哈希索引
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 值轉換為哈希碼,然後用於執行等值查詢。

  1. 複合索引
-- 創建複合索引
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 的等值查詢。

  1. 全文本索引
-- 創建全文本索引
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/


上一篇
什麼是資料庫index? Day17
下一篇
cookie 跟 session 的差別? Day19
系列文
從餐飲業轉職成小白工程師的所見所學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言