您好,登錄后才能下訂單哦!
PostgreSQL查詢速度慢如何解決?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
并非每個PostgreSQL查詢都會自動使用索引,只有在表的大小超過一個最小值,并且查詢只會選中表中較小比例的記錄時才會采用索引。這是因為索引掃描引起的隨即磁盤存取可能比直接地讀取表(順序掃描)更慢。
為了判斷是否使用索引,PostgreSQL必須獲得有關表的統計值。這些統計值可以使用 VACUUM ANALYZE,或 ANALYZE 獲得。 使用統計值,優化器知道表中有多少行,就能夠更好地判斷是否利用索引。 統計值對確定優化的連接順序和連接方法也很有用。在表的內容發生變化時,應定期進行統計值的更新收集。
索引通常不用于 ORDER BY 或執行連接。對一個大表的一次順序掃描,再做一個顯式的排序通常比索引掃描要快。
但是,在 LIMIT 和 ORDER BY 結合使用時經常會使用索引,因為這只會返回表的一小部分。 實際上,雖然 MAX() 和 MIN() 并不使用索引,通過對 ORDER BY 和 LLIMIT 使用索引取得最大值和最小值也是可以的:
SELECT colFROM tabORDER BY col [ DESC ]LIMIT 1;
如果你確信PostgreSQL的優化器使用順序掃描是不正確的,你可以使用SET enable_seqscan TO 'off' 然后再次運行查詢,你就可以看出使用一個索引掃描是否確實要快一些。當使用通配符操作,例如 LIKE 或 ~ 時,索引只能在特定的情況下使用。
比如字符串的開始部分必須是普通字符串,也就是LIKE模式不能以 % 打頭。~(正則表達式)模式必須以 ^ 打頭。
字符串不能以匹配多個字符的模式類打頭,例如 [a-e]。
大小寫無關的查找,如ILIKE和 ~* 等不使用索引。
在做 initdb 時必須采用缺省的本地設置Clocale,因為系統不可能知道在非C locale情況時下一個最大字符是什么。在這種情況下,你可以創建一個特殊的text_pattern_ops索引來用于LIKE的索引。
關于PostgreSQL查詢速度慢如何解決問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。