您好,登錄后才能下訂單哦!
這篇文章主要介紹“SQL優化的方法有哪些”,在日常操作中,相信很多人在SQL優化的方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SQL優化的方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
在應用系統開發初期,由于開發數據庫數據比較少,對于查詢SQL語句,復雜視圖的編寫等體會不到SQL語句各種語法等性能優劣,但是隨著互聯網大數據的興起,隨著數據庫中數據的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。
系統優化中一個很重要的方面就是SQL語句的優化,對于海量數據,劣質SQL語句和優質SQL語句之間的速度差別可以達到上百倍,可見對于一個系統不是簡單地能實現功能就可,而是要寫出高質量的SQL語句,提高系統的可用性。
在多數情況下,Oracle使用索引來更快地遍歷表,優化器主要根據定義的索引提高性能。但是,如果在SQL語句的where子句中寫的SQL代碼不合理,就會造成優化器刪去索引而使用全表掃描,一般就這種SQL語句就是所謂的劣質SQL語句,在編寫SQL語句時,我們應清楚優化器根據何種原則來刪除索引,這有助于寫出高性能的SQL語句。我們要做到不但會寫SQL還要做到寫出性能優良的SQL。
常見優化規則:
一、表連接
-連接的表越多,性能越差
-可能的話,將連接拆分成若干個過程逐一執行
-優先執行可明顯減少數據量的連接,即可以降低復雜度,也能夠容易按照預期執行
-如果不可避免多表連接,很可能是設計缺陷
-外連接效果差,因為外連接必須對左右表進行表掃描
-盡量使用inner join查詢
二、使用臨時表
如果不可避免,可以考慮使用臨時表或表變量存放中間結果
三、少用子查詢
四、視圖嵌套
不要過深,一般視圖嵌套不要超過2個為宜。
SQL編寫注意事項:
1、null列使用索引沒有意義,任何包含null值的列都不會被包含在索引中,因此where語句中的is null 或is not null 的語句優化器是不允許使用索引的
2、concat或 || ,如果對列進行該函數操作,那么也會忽略索引的使用
3、like,通配符出現在首位,無法使用索引,反之可以
4、order by 子句中不要使用非索引列或嵌套表達式
5、not或!=無法使用索引,改用<,>
6、where與having,如果having中的過濾行為能夠在wehre中完成,則應該優先考慮where
7、exists替代in,not in四最低效的,因為要對子查詢的表進行全表掃描。可以考慮使用外連接或 not exists
8、索引,不要給不必要的字段增加索引,SQL語句盡量大寫,不要在索引上使用函數
9、>,>=時,推薦使用>=
10、使用union代替or
11、union和union all,union具有去重的操作,增加了計算時間,union all不需要去重,但會包含相同記錄。同樣功能下,首選union all操作。
到此,關于“SQL優化的方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。