🌐 This page hasn't been translated yet — showing the original Chinese. Translated posts

#performance

單執行緒 + event loop:一條隊,一個一個處理 client client client client 上萬連線 epollI/O 多工一個執行緒盯全部 命令佇列(一條隊)cmd1cmd2cmd3 單執行緒執行逐一執行、每個原子無鎖、無 race Redis 6 的「多執行緒」只用在讀寫 socket 這些網路雜活—— 命令的「執行」仍是單執行緒,所以原子性、免鎖的好處通通不變

Redis 單執行緒為什麼反而快?——以及 O(N) 命令的地雷

· tech · 約 4 分鐘 · 📚 Redis 學習筆記 #3

第一篇說 Redis 快的原因之一是「單執行緒 + 免鎖」。這聽起來很反直覺——單執行緒不是慢嗎? 這篇就把這件事講透:為什麼單執行緒反而快、它換來什麼,以及它一體兩面的代價——一個慢命令會卡住所有人…

#redis#performance

Nested Loop 內表(有索引更快) 外表每列 → 查內表一次 適合:小表 / 內表有索引 Hash Join 小表 Hash 表(記憶體) 大表 小表建 hash,大表 probe 適合:大表、等值 join Merge Join 1 3 5 2 4 6 兩側排序後,像拉鍊合併 適合:已排序 / 有索引

讀懂 EXPLAIN:優化器到底怎麼跑你的 query

· tech · 約 3 分鐘 · 📚 SQL 我以為我懂 #10

上一篇留了一個問題:索引到底有沒有被用到?答案就在 EXPLAIN 裡。這篇是我之前寫的 Spark 執行計畫那篇的 SQL 版姊妹作——同一套「讀計畫、找瓶頸」的思維,換一個引擎。學會讀 EXPLA…

#sql#performance

沒索引:Seq Scan(全表掃) 列 1 列 2 列 3 列 4 列 5 ← 目標 列 6 逐列掃過才找到 → O(n),資料越多越慢 有索引:B-tree 節點 節點 目標 沿樹往下幾步就到 → O(log n)

索引為什麼快 —— 也為什麼會失效

· tech · 約 2 分鐘 · 📚 SQL 我以為我懂 #9

接下來換個主題:引擎與效能。第一個要懂的就是索引——為什麼加了它查詢快幾百倍,又為什麼有時加了卻好像沒用。這兩個問題的答案,都藏在它的資料結構裡:B-tree。 沒有索引時,WHERE id = 50…

#sql#performance

你的 code DataFrame API 或 Spark SQL —— 兩者等價 Logical Plan ·「要什麼」 解析出你引用的表與欄位,還沒最佳化 Catalyst 最佳化器 filter 下推 · 剪掉沒用的欄位 · 挑 join 策略 Physical Plan ·「怎麼做」 Exchange(= shuffle)、join 策略都定案 執行 切成 stage / task,丟到 executor 上跑

讀懂 Spark 執行計畫:.explain() 到底在說什麼

· tech · 約 5 分鐘 · 📚 Spark 學習筆記 #6

這個系列一路講下來,有兩句話反覆出現:「相信 Catalyst 最佳化器」、「打開 Spark UI 找瓶頸」。但我一直沒回答一個問題:你到底要怎麼看 Spark 做了什麼? 相信最佳化器不該是盲信—…

#spark#data-engineering#performance