iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0

Day17 聯合索引1

今天來用一個 usecase 講一下聯合索引,不是太專業但是讓念資料庫的朋友可以有個脈絡

然後不小心發現了一個 bug,就是小林coding裡面是 MySQL,可是前面選環境的時候是 postgres

後面看需求要不要來做調整,反正個人覺得兩個資料庫(甚至其他)背後原理知識不會差太多

CREATE TABLE test (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    ranks VARCHAR(1) NOT NULL,
    score INT NOT NULL,
    points INT NOT NULL
);
CREATE INDEX rank_score_points ON test (ranks, score, points);

這邊我們模擬了遊戲榜單,欄位
姓名name/排名rank/分數score/儲值點數points
不需要測試資料因為我們使用 explain 去觀察效能
CREATE INDEX rank_score_points ON test (ranks, score, points);
這邊的索引設計上是用可以重複的一般聯合索引來做查詢加速

有用索引的測試

explain select * from test where ranks = 'A' and score > 300 and points < 5000;

這邊會查出
(1) type = range
(2) Extra = Using index

沒有走索引的測試

explain select * from test where  score > 300 and points < 5000;

查出
type = ALL
Extra = Using where

為什麼會有這個差別,因為聯合索引「最左匹配索引」,篇幅怕太長我們下一篇講!


上一篇
Day16 索引1
下一篇
Day18 聯合索引2
系列文
我獨自升級之資料庫從入門到中階20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言