PG:查詢(xún)計(jì)劃器與random_page_cost
查詢(xún)計(jì)劃器與random_page_cost
本周小貼士比較奇怪,基于我們今天遇到的一個(gè)問(wèn)題。將簡(jiǎn)訊的鏈接存儲(chǔ)到一個(gè)簡(jiǎn)單數(shù)據(jù)庫(kù)中:
CREATE TABLE links (
uid CHAR(60) PRIMARY KEY,
data TEXT,
timestamp INT
)
CREATE INDEX idx_trgm ON links USING GIN (data gin_trgm_ops)
當(dāng)然,這個(gè)設(shè)計(jì)比較爛。但僅供內(nèi)部使用,我只是一個(gè)粗略的想法原型。數(shù)據(jù)是一個(gè)包含json(I know, I know...)的文本,以同樣可怕的方式檢查鏈接的存在:
SELECT * FROM links WHERE data ILIKE '%whatever we want%' LIMIT 1;
在低容量下運(yùn)行很好,但查詢(xún)時(shí)間偶爾會(huì)超過(guò)300ms,很好奇這是為啥?
執(zhí)行EXPLAIN ANALYZE后,發(fā)現(xiàn)PG根本沒(méi)使用GIN索引,而是使用了全表掃描。但是如果去掉LMIT 1,查詢(xún)將使用索引,執(zhí)行只需要5ms。為什么PG會(huì)忽略索引?
PG的查詢(xún)規(guī)劃器并不是真正基于人們做一些荒唐的事情。比如使用ILIKE進(jìn)行全表掃描,關(guān)心的是走索引快還是全表掃描快。變量random_page_cost用于決定使用索引的代價(jià)是否值得,或者和seq_page_cost合作使用。
這種情況下,索引掃描是值得的,但是查詢(xún)規(guī)劃器不同意。因?yàn)榭雌饋?lái)很簡(jiǎn)單的LIMIT 1,只找到一個(gè)結(jié)果就可以停止。并繼續(xù)進(jìn)行全表掃描。
SET random_page_cost = 1;
EXPLAIN ANALYZE SELECT * ... LIMIT 1;
[see the index being used]
SET random_page_cost = DEFAULT;
EXPLAIN ANALYZE SELECT * ... LIMIT 1;
[see the index NOT being used]
除了明顯的“修復(fù)那個(gè)糟糕的模式”,看看PG會(huì)做什么,如果覺(jué)得索引掃描和順序掃描比代價(jià)低。因此如果最終得到的查詢(xún)使用索引,那么有必要嘗試一下,通過(guò)EXPLAIN ANALYZE分析。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
最新活動(dòng)更多
-
7月8日立即報(bào)名>> 【在線會(huì)議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車(chē)生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身智能機(jī)器人產(chǎn)業(yè)技術(shù)創(chuàng)新應(yīng)用論壇
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
推薦專(zhuān)題
- 1 AI 眼鏡讓百萬(wàn) APP「集體失業(yè)」?
- 2 豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
- 3 一文看懂視覺(jué)語(yǔ)言動(dòng)作模型(VLA)及其應(yīng)用
- 4 “支付+”時(shí)代,支付即生態(tài) | 2025中國(guó)跨境支付十大趨勢(shì)
- 5 中國(guó)最具實(shí)力AI公司TOP10
- 6 特斯拉Robotaxi上路,馬斯克端上畫(huà)了十年的餅
- 7 深圳跑出40億超級(jí)隱形冠軍:賣(mài)機(jī)器人年入6.1億,港股上市
- 8 張勇等人退出阿里合伙人
- 9 “AI六小虎”到了下一個(gè)賽點(diǎn)
- 10 AI的夏天:第四范式VS云從科技VS地平線機(jī)器人