sql語句如何最佳化?
sql語句優化的幾種方法有:1、統一SQL語句的格式;2、對查詢進行最佳化,應盡量避免全表掃描;3、SQL語句要簡潔;4、考慮使用「臨時表」暫存中間結果;5、盡量避免大事務操作;6、盡量避免向客戶端傳回大資料量。以下這篇文章就來給大家具體介紹一些,希望對大家有幫助。
我們開發專案上線初期,由於業務資料量相對較少,一些SQL的執行效率對程式運作效率的影響不太明顯,而開發和維運人員也無法判斷SQL對程式的運作效率有多大,故很少針對SQL進行專門的最佳化,而隨著時間的積累,業務資料量的增多,SQL的執行效率對程式的運作效率的影響逐漸增大,此時對SQL的最佳化就很有必要。
sql語句最佳化的幾種方法:
#1、統一SQL語句的格式
#對於以下兩句SQL語句,很多人認為是相同的,但是,資料庫查詢最佳化器認為是不同的。
● select * from dual
● select * From dual
雖然只是大小寫不同,查詢分析器就認為是兩句不同的SQL語句,必須進行兩次解析。產生2個執行計劃。所以身為程式設計師,應該要保證相同的查詢語句在任何地方都一致,多一個空格都不行!
2、少用 * ,用具體的欄位清單取代“*”,不要傳回任何用不到的欄位。
3、對查詢進行最佳化,應盡量避免全表掃描
1)、應考慮在 where 及 order by 涉及的列上建立索引。
2)、應盡量避免在where 子句中對欄位進行null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num is null
#可以在num上設定預設值0,確保表中num列沒有null值,然後這樣查詢:
select id from t where num=0
3)、應盡量避免在where 子句中使用!=或<>運算子,否則會導致引擎放棄使用索引而進行全表掃描
4)、應盡量避免在where 子句中使用or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num=10 or num=20
可以這樣查詢:
select id from t where num=10 union all select id from t where num=20
5)、慎用in 和not in,否則會導致全表掃描,如:
select id from t where num in(1,2,3)
對於連續的數值,能用between 就不要用in 了:
select id from t where num between 1 and 3
6)、合理使用like模糊查詢
有的時候會需要進行一些模糊查詢例如:
select * from contact where username like ‘%yue%’
關鍵字%yue%,由於yue前面用到了“%”,因此該查詢必然走全表掃描,除非必要,否則不要在關鍵字前加%
7)、應盡量避免在where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。如:
select id from t where num/2=100
應改為:
select id from t where num=100*2
8)、應盡量避免在where子句中對欄位進行函數操作,這將導致引擎放棄使用索引而進行全表掃描。如:
查詢name以abc開頭的id
select id from t where substring(name,1,3)='abc'
應改為:
select id from t where name like 'abc%'
4、以exists 取代in
4. #很多時候用exists 代替in 是一個好的選擇,Exists只檢查存在性,效能比in強很多。例:
select num from a where num in(select num from b)
用下面的語句替換: 一般,將一個Select語句的結果當作子集,然後從該子集中再進行查詢,這種一層嵌套語句還是比較常見的,但是根據經驗,超過3層嵌套,查詢優化器就很容易給出錯誤的執行計劃。因為它被繞暈了。像這種類似人工智慧的東西,終究比人的分辨力要差些,如果人都看暈了,我可以保證資料庫也會暈的。 另外,執行計劃是可以重複使用的,越簡單的SQL語句被重複使用的可能性越高。而複雜的SQL語句只要有一個字元改變就必須重新解析,然後再把這一大堆垃圾塞在記憶體裡。可想而知,資料庫的效率會何等低下。 7、在使用索引欄位作為條件時,如果該索引是複合索引,那麼必須使用到該索引中的第一個欄位作為條件時才能保證系統使用該索引, 否則該索引將不會被使用,並且應盡可能的讓欄位順序與索引順序相一致。 8、盡量使用數字型欄位,若只含數值資訊的欄位盡量不要設計為字元型,這會降低查詢和連接的效能,並會增加儲存開銷。 9、盡可能的使用varchar 代替char ,因為首先變長字段存儲空間小,可以節省存儲空間, 其次對於查詢來說,在一個相對較小的字段內搜尋效率顯然要高些。 10、避免經常建立和刪除臨時表,以減少系統表資源的消耗。 11、盡量避免使用遊標,因為遊標的效率較差,如果遊標操作的資料超過1萬行,那麼就應該考慮改寫。 12、盡量避免大事務操作,提高系統並發能力。 13、盡量避免向客戶端傳回大資料量,若資料量過大,應考慮對應需求是否合理。 相關影片教學推薦:《MySQL教學》 以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。更多精彩內容大家可以追蹤php中文網相關教學欄位! ! ! 以上是sql語句如何最佳化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!select num from a where exists(select 1 from b where num=a.num)
這是因為引擎在處理查詢和連接時會逐個比較字串中每一個字符,而對於數字型而言只需要比較一次就夠了。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

HQL和SQL在Hibernate框架中進行比較:HQL(1.物件導向語法,2.資料庫無關的查詢,3.類型安全),而SQL直接操作資料庫(1.與資料庫無關的標準,2.可執行複雜查詢和資料操作)。

時間複雜度衡量演算法執行時間與輸入規模的關係。降低C++程式時間複雜度的技巧包括:選擇合適的容器(如vector、list)以最佳化資料儲存和管理。利用高效演算法(如快速排序)以減少計算時間。消除多重運算以減少重複計算。利用條件分支以避免不必要的計算。透過使用更快的演算法(如二分搜尋)來優化線性搜尋。

MySQL連線數對資料庫效能的影響分析隨著網路應用的不斷發展,資料庫成為了支援應用系統重要的資料儲存和管理工具。在資料庫系統中,連線數是一個重要的概念,它直接關係到資料庫系統的效能和穩定性。本文將從MySQL資料庫的角度出發,探討連線數對資料庫效能的影響,並透過具體的程式碼範例進行分析。一、連線數是什麼?連線數指的是資料庫系統同時支援的客戶端連線數,也可以理

1.在桌面上按組合鍵(win鍵+R)開啟運行窗口,接著輸入【regedit】,回車確認。 2.開啟登錄編輯程式後,我們依序點選展開【HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer】,然後看目錄裡有沒有Serialize項,如果沒有我們可以點選右鍵Explorer,新建項,並將其命名為Serialize。 3.接著點選Serialize,然後在右邊窗格空白處點選滑鼠右鍵,新建一個DWORD(32)位元值,並將其命名為Star

PHP函數效率最佳化的五大方法:避免不必要的變數複製。使用引用以避免變數複製。避免重複函數呼叫。內聯簡單的函數。使用數組優化循環。

Vivox100s參數配置大揭密:處理器效能如何最佳化?在當今科技快速發展的時代,智慧型手機已經成為我們日常生活不可或缺的一部分。作為智慧型手機的重要組成部分,處理器的效能優化直接關係到手機的使用體驗。 Vivox100s作為一款備受矚目的智慧型手機,其參數配置備受關注,尤其是處理器效能的最佳化議題更是備受用戶關注。處理器作為手機的“大腦”,直接影響手機的運行速度

利用雜湊表可最佳化PHP數組交集和並集計算,將時間複雜度從O(n*m)降低到O(n+m),具體步驟如下:使用雜湊表將第一個數組的元素映射到布林值,以快速找出第二個陣列中元素是否存在,提高交集計算效率。使用雜湊表將第一個陣列的元素標記為存在,然後逐一新增第二個陣列的元素,忽略已存在的元素,提高並集計算效率。

PHP函數最佳化秘訣:快取查詢結果以避免重複資料庫存取。減少不必要的函數調用,如使用函數內聯。最佳化演算法,選擇時間複雜度較低的演算法。利用PHP擴展,如Memcached用於緩存,APC用於編譯和緩存PHP腳本。
