十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
PostgreSQL查詢速度慢如何解決?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
東區(qū)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
并非每個PostgreSQL查詢都會自動使用索引,只有在表的大小超過一個最小值,并且查詢只會選中表中較小比例的記錄時才會采用索引。這是因為索引掃描引起的隨即磁盤存取可能比直接地讀取表(順序掃描)更慢。
為了判斷是否使用索引,PostgreSQL必須獲得有關(guān)表的統(tǒng)計值。這些統(tǒng)計值可以使用 VACUUM ANALYZE,或 ANALYZE 獲得。 使用統(tǒng)計值,優(yōu)化器知道表中有多少行,就能夠更好地判斷是否利用索引。 統(tǒng)計值對確定優(yōu)化的連接順序和連接方法也很有用。在表的內(nèi)容發(fā)生變化時,應(yīng)定期進(jìn)行統(tǒng)計值的更新收集。
索引通常不用于 ORDER BY 或執(zhí)行連接。對一個大表的一次順序掃描,再做一個顯式的排序通常比索引掃描要快。
但是,在 LIMIT 和 ORDER BY 結(jié)合使用時經(jīng)常會使用索引,因為這只會返回表的一小部分。 實際上,雖然 MAX() 和 MIN() 并不使用索引,通過對 ORDER BY 和 LLIMIT 使用索引取得最大值和最小值也是可以的:
SELECT colFROM tabORDER BY col [ DESC ]LIMIT 1;
如果你確信PostgreSQL的優(yōu)化器使用順序掃描是不正確的,你可以使用SET enable_seqscan TO 'off' 然后再次運行查詢,你就可以看出使用一個索引掃描是否確實要快一些。當(dāng)使用通配符操作,例如 LIKE 或 ~ 時,索引只能在特定的情況下使用。
比如字符串的開始部分必須是普通字符串,也就是LIKE模式不能以 % 打頭。~(正則表達(dá)式)模式必須以 ^ 打頭。
字符串不能以匹配多個字符的模式類打頭,例如 [a-e]。
大小寫無關(guān)的查找,如ILIKE和 ~* 等不使用索引。
在做 initdb 時必須采用缺省的本地設(shè)置Clocale,因為系統(tǒng)不可能知道在非C locale情況時下一個最大字符是什么。在這種情況下,你可以創(chuàng)建一個特殊的text_pattern_ops索引來用于LIKE的索引。
關(guān)于PostgreSQL查詢速度慢如何解決問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。