優化sql查詢

2021-07-11 22:43:50 字數 1412 閱讀 6883

如何寫出高效能的sql語句

執行計畫是資料庫根據sql語句和相關表的統計資訊坐出的乙個查詢方案,這個方案是由查詢優化器自動分析產生的,比如一條sql語句如果用來從乙個n條記錄中查詢其中一條,那查詢優化器會選擇「索引掃瞄」方式。

該錶如果使用了歸檔,那查詢優化器就會改變方案,採用「全表掃瞄」方式。

執行計畫並不是固定的,所以要產生乙個正確的「執行計畫」要注意:

sql語句是否清晰地告訴查詢優化器要幹什麼?

查詢優化器:負責生成 sql 語句的有效執行計畫的 sql server 資料庫引擎元件(詳解–**sql server查詢優化器的工作原理)

歸檔:儲存有組織的資料,目的是長時間存放有組織的資料集,確保其將來能夠被精細地檢索

對於以下兩句sql語句,程式設計師認為是相同的,資料庫查詢優化器認為是不同的

select*from table_name

select*from table_name

其實就是大小寫不同,查詢分析器就認為是不同的sql語句進行兩次解析。所以作為程式設計師應該保證相同的查詢語句在如何地方都一致。

經常看到,我們在進行sql查詢的時候有些sql語句非常非常複雜。一般來說這麼複雜的語句通常是有問題的。一般,將乙個select語句結果作為子集,然後從該子集中再進行查詢,這種一層巢狀語句還是比較常見,但是根據經驗。超過3層巢狀,查詢優化器很容易給出錯誤的執行計畫,因為它被繞暈了。

簡化sql語句的重要方法就是採用臨時表暫存中間結果。臨時表的好處遠遠不止這些,將臨時結果暫時存在臨時表,後面的查詢就查詢臨時表了,就避免程式多次掃瞄主表。

select*from table_name where time > 『2016-05-23 09:15:02』

select*from table_name where time > 『2016-05-25 09:00:00』

以上兩句語句,查詢優化器認為是不同的sql語句,需要解析兩次。如果採用繫結變數

select*from table_name where time > @time

@time變數可以傳入任何值,這樣大量類似查詢可以重用該執行計畫這可以大大降低資料庫解析sql語句的負擔。

一次解析,多次重用,是提高資料庫效率的原則

建立有用的索引是提高查詢效能的最重要方法之一。

與大多數效能優化方法一樣。此方法也有一些缺點。如:使用較多索引時,select查詢執行速度可能會更快。但是dml(insert,update和delete)操作的速度將顯著減慢,因為對於每個操作都必須維護更多的索引。因此,您的查詢主要包含select語句,則使用較多的索引是非常有幫助的,如果程式需要執行許多dml操作,就有必要控制建立的索引數。(詳解)

查詢優化 SQL優化

查詢優化注意點 代表查詢速度比較 1 所有查詢必須注意 的使用必要性 cout 1 cout 2 字段 主鍵索引 字段 普通索引 字段 沒有索引 3 乙個字段 多個字段 欄位多越慢 4 大於10000和大於10001的區別 後者大於前者 5 列沒別名 列 有別名6 兩個條件,where時應該將符合資...

查詢優化 sql

查詢1 declare d datetime set d getdate select top 1000 from product where contains name,男上裝 or contains text,男上裝 select datediff ms,d,getdate set d getd...

SQL查詢優化

避免使用 select 的做法這樣,很多時候查詢出來的字段,資料是冗餘的,是沒有意義的,會消耗網路 cpu 記憶體等等。如果要查詢某些字段,但是查詢這些欄位的資料時,會大量的掃瞄這個表,耗費的資源太大了,怎麼辦呢?我們應該建立合適的索引,避免大量的掃瞄表。比如,我每3個月要刪除大約1000000條資...