SQL 語句調優 where 條件 數據類型 臨時表 索引


基本原則

  • 避免全表掃描
  • 建立索引
  • 盡量避免向客戶端返回大數據量,若數據量過大,應該考慮相應需求是否合理
  • 盡量避免大事務操作,提高系統並發能力
  • 使用基於游標的方法或臨時表方法之前,應先尋找基於集的解決方案來解決問題,基於集的方法通常更有效。盡量避免使用游標,因為游標的效率較差。

 

where 后的條件

  • 應盡量避免在 where 子句中使用 != 或 <> 操作符,否則將引擎放棄使用索引而進行全表掃描。
  • 應盡量避免在 where 子句中使用 or 來連接條件,可以考慮使用union 代替
  • in 和 not in 也要慎用,對於連續的數值,能用 between 就不要用 in,exists 代替 in
  • 盡量避免在 where 子句中對字段進行表達式操作和函數操作

數據類型

  • 盡量使用數字型字段,若只含數值信息的字段盡量不要設計為字符型,這會降低查詢和連接的性能,並會增加存儲開銷。
  • 盡可能的使用 varchar/nvarchar 代替 char/nchar ,因為變長字段存儲空間小,對於查詢來說,在一個相對較小的字段內搜索效率顯然要高些。
  • 最好不要給數據庫留NULL,盡可能的使用 NOT NULL填充數據庫.備注、描述、評論之類的可以設置為 NULL,其他的,最好不要使用NULL。
  • 任何地方都不要使用 select * from t ,用具體的字段列表代替“*”,不要返回用不到的任何字段。

臨時表

  • 避免頻繁創建和刪除臨時表,以減少系統表資源的消耗。對於一次性事件, 最好使用導出表。
  • 在新建臨時表時,如果一次性插入數據量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果數據量不大,為了緩和系統表的資源,應先create table,然后insert。
  • 如果使用到了臨時表,在最后將所有的臨時表顯式刪除時,先 truncate table ,然后 drop table ,這樣可以避免系統表的較長時間鎖定。

索引

  • 先應考慮在 where 及 order by 涉及的列上建立索引。
  • 在使用索引字段作為條件時,如果該索引是復合索引,那么必須使用到該索引中的第一個字段作為條件 時才能保證系統使用該索引, 否則該索引將不會 被使用, 並且應盡可能的讓字段順序與索引順序相一致。
  • 索引並不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert和update 的效率,因為 insert 或 update 時有可能會重建索引,所以視具體情況而定。一個表的索引數最好不要超過7個,若太多則應考慮一些不常使用到的列上建的索引是否有必要.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM