第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

防止PostgreSQL有時(shí)選擇錯(cuò)誤的查詢計(jì)劃

防止PostgreSQL有時(shí)選擇錯(cuò)誤的查詢計(jì)劃

婷婷同學(xué)_ 2019-07-12 15:25:14
防止PostgreSQL有時(shí)選擇錯(cuò)誤的查詢計(jì)劃對(duì)于使用PostgreSQL 8.4.9進(jìn)行查詢的PostgreSQL性能,我遇到了一個(gè)奇怪的問題。此查詢是在3D卷中選擇一組點(diǎn),使用LEFT OUTER JOIN若要添加存在關(guān)聯(lián)ID的相關(guān)ID列,請(qǐng)執(zhí)行以下操作。的小變化x范圍會(huì)導(dǎo)致PostgreSQL選擇不同的查詢計(jì)劃,執(zhí)行時(shí)間從0.01秒到50秒不等。這是一個(gè)有問題的查詢:SELECT treenode.id AS id,        treenode.parent_id AS parentid,        (treenode.location).x AS x,        (treenode.location).y AS y,        (treenode.location).z AS z,        treenode.confidence AS confidence,        treenode.user_id AS user_id,        treenode.radius AS radius,        ((treenode.location).z - 50) AS z_diff,        treenode_class_instance.class_instance_id AS skeleton_id  FROM treenode LEFT OUTER JOIN          (treenode_class_instance INNER JOIN           class_instance ON treenode_class_instance.class_instance_id    = class_instance.id                             AND class_instance.class_id = 7828307)        ON (treenode_class_instance.treenode_id = treenode.id                   AND treenode_class_instance.relation_id = 7828321)        WHERE treenode.project_id = 4     AND (treenode.location).x >= 8000     AND (treenode.location).x <= (8000 + 4736)     AND (treenode.location).y >= 22244     AND (treenode.location).y <= (22244 + 3248)     AND (treenode.location).z >= 0     AND (treenode.location).z <= 100   ORDER BY parentid DESC, id, z_diff   LIMIT 400;我不是解析這些查詢計(jì)劃的專家,但明顯的區(qū)別似乎在于x它使用的范圍是Hash Left Join為L(zhǎng)EFT OUTER JOIN(這非???,而對(duì)于另一個(gè)范圍,它使用的是Nested Loop Left Join(這似乎很慢)。在這兩種情況下,查詢都返回大約90行。如果我做了SET ENABLE_NESTLOOP TO FALSE在查詢的慢版本之前,它運(yùn)行得非??欤依斫庖话銇碚f,使用這種設(shè)置是個(gè)壞主意。.例如,我是否可以創(chuàng)建一個(gè)特定的索引,以使查詢計(jì)劃者更有可能選擇明顯更有效的策略?有人能提出為什么PostgreSQL的查詢規(guī)劃器會(huì)為其中一個(gè)查詢選擇這么糟糕的策略嗎?下面我已經(jīng)包含了可能有幫助的模式的細(xì)節(jié)。
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

如果查詢規(guī)劃者做了錯(cuò)誤的決定,這主要是兩件事中的一件:

1.統(tǒng)計(jì)是不準(zhǔn)確的。

你跑嗎?ANALYZE足夠的?在它的組合形式中也很流行VACUUM ANALYZE..如果自真空是ON(這是現(xiàn)代Postgres的默認(rèn)設(shè)置),ANALYZE自動(dòng)運(yùn)行。但請(qǐng)考慮:

(前兩個(gè)答案仍然適用于Postgres 9.6。)

如果你的桌子是大的而數(shù)據(jù)分布是不規(guī)則,提高default_statistics_target也許會(huì)有幫助?;蛘哒f,只是設(shè)置統(tǒng)計(jì)目標(biāo)相關(guān)欄(WHEREJOIN(基本上是查詢的子句):

ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400;  -- calibrate number

目標(biāo)可以設(shè)定在0到10000之間;

ANALYZE在此之后(在相關(guān)的表格上)。

2.成本設(shè)置對(duì)規(guī)劃師來說,估計(jì)值已經(jīng)取消了。

讀這一章計(jì)劃成本常數(shù)在手冊(cè)里。

看看這些章節(jié)默認(rèn)統(tǒng)計(jì)量目標(biāo)隨機(jī)頁(yè)成本在這個(gè)問題上一般有用的PostgreSQL Wiki頁(yè)面.

還有許多其他可能的原因,但這些是目前為止最常見的原因。


查看完整回答
反對(duì) 回復(fù) 2019-07-12
?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

歐文對(duì)統(tǒng)計(jì)數(shù)字的評(píng)價(jià)。此外:

ORDER BY parentid DESC, id, z_diff

分揀

parentid DESC, id, z

可能會(huì)給樂觀主義者更多的洗牌空間。(我認(rèn)為這不會(huì)有多大關(guān)系,因?yàn)檫@是最后一個(gè)學(xué)期,而且也不那么昂貴,但你可以試一試)


查看完整回答
反對(duì) 回復(fù) 2019-07-12
  • 3 回答
  • 0 關(guān)注
  • 520 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)