在SQL語句中可以使用SQL優化,如添加索引、選擇合適數據類型、避免使用SELECT *
、使用臨時表暫存中間結果等方法,提高查詢性能和簡化數據庫操作。
優化能力
控制IN條件或OR條件的條目數量,過多的條目會導致RCA優化時間加長。
盡量避免在WHERE條件中使用復雜表達式或函數操作,可能導致優化器行數估算不準確。
索引
為避免全表掃描,可以在WHERE條件涉及的列上添加索引。
WHERE條件避免使用
!=
或<>
操作符號,只有在=
、<
、<=
、>
、>=
、between時才可用到索引。WHERE條件中盡量避免使用OR條件。隨著被OR的條件增多,優化器越發傾向于不適用索引。當您發現一條SQL預期使用某一列上的索引而實際未使用時,重點排查OR是否過多,有條件可以使用union來改寫該SQL。
LIKE條件可以考慮使用全文檢索替代。BTREE索引僅支持最左側不包含通配符的LIKE條件,其他情況需要使用GIST/GIN索引(pg_trgm插件)。
數據類型
盡量使用數值類型,避免使用字符串類型,字符串類型會降低查詢和連接性能。
盡量使用
varchar(n)
替代char(n)
,節省存儲空間,減少計算內存,加速字符串比較效率。
數據列
盡量避免使用
SELECT *
,從業務角度優化需要輸出的列。
臨時表
復雜查詢可使用臨時表暫存中間結果,一方面方便業務調試,另一方面避免不必要的重復計算。
WHERE條件
如果有IN子句,盡量將出現頻率高的值放在IN子句的前面,減少比較次數。
JOIN
一個查詢中產于JOIN的表數量控制在12個以內,多于12個表JOIN,可以考慮使用臨時表拆分語句。
存儲過程或函數
能使用SQL語句實現的,不要用循環去實現。
文檔內容是否對您有幫助?