sql优化学习(一)
找到一套好的sql優化視頻,地址如下:
http://www.ppvke.com/10355.html
p.s. 我在百度搜索半天都是些亂七八糟的東西,我用google搜索后,立刻就發現上面的視頻地址,看了一些后,發現蠻有收獲的,跟大家分享。
視頻一共十五周,前四周的內容,聽完了,也沒做練習,權當聽故事。從第五周的開始,我發現需要認真聽,認真練習。如果時間不充裕,從第五周開始學習也可以。(個人意見)
?
1. 綁定變量 1 select aaa,bbb from ccc where ddd=fff; 2 select aaa,bbb from ccc where ddd=ggg;每條語句都需要進行解析,這里有兩條,需要解析2回,有N條,就需要解析N回。每次執行一條sql文,消耗的時間中,解析占了絕大的比例。
如果把fff 換成 :XXX (XXX可以隨意填寫) , 這樣的話,就只進行一次解析。
?
2.臟讀、幻讀、不可重復讀
具體的含義,我就不寫了,別人講的更清楚,我貼出地址:
http://blog.sina.com.cn/s/blog_8020e4110101bfc6.html
?
3.所有的優化都是從業務開始的
作為程序員,雖說成天處理代碼,但是遇到問題,解決問題的出發點,要先從業務出發。
?
4.表分區
表分區,可以改善查詢性能,方便數據管理,方便數據備份恢復。參考地址如下:
http://www.cnblogs.com/pengineer/p/4393988.html
我在練習oracle partition這個功能的時候,悲催的發現,oracle只有Enterprise edition這個版本中才paritition。。。
郁悶!暫時無法練習嘗試了!
?
5.ROWID & ROWNUM
ROWNUM指的是表中的行數,第一行,第二行,.ect? 而ROWID是在指明這條數據在磁盤中位置的物理地址。更詳細的請參考如下鏈接:
http://www.dba-oracle.com/t_rownum_rowid_difference.htm
?
6.UNION & UNION ALL
兩者都是合并結果集,不同在于,前者是去掉重復值,后者是不去掉重復值。
因為UNION在運行時,要去掉重復值,機制中,它會排序去重,所以花費的時間多,所以優化時可通過業務上分析,如果兩個結果集不存在重復值,那么合并的時候就應該選擇UNION ALL。這也是優化的一個案例。
?
7.COUNT
我相信有時需要查看這個表中,是否有數據,所以sql就會寫成,select count(1) from table;
表中數據多時,這樣就會造成時間的浪費,我們不需要知道有多少條數據,只要清楚里面是否有數據,所以sql優化成下面的這個樣子:
select count(1) from table where rownum = 1;
這樣,只檢查第一條是否有就可以,第一條有,那么這表就有數據。
?
8.DISTINCT
去重功能,少用,因為去重,會產生排序,會消耗大量時間。
?
9.MAX & MIN
select max_class, min_class from
(select max(CLASS_ID) max_class from student),
(select min(CLASS_ID) min_class from student);
同時查詢最大值和最小值時,寫成如上sql,因為當查詢最大值或最小值時,當有索引的前提下,執行計劃不要要全表查詢,邏輯讀只需要兩次就可以查到了。但是同時出現時,就會進行全表掃描,因此,寫成上面的sql,可以避免全表掃描,提高查詢效率。
?
?
這篇就寫到這里,不會的太多,堅持學習,加油!
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/lihao007/p/6876080.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的sql优化学习(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Struts2与Struts1的区别
- 下一篇: Maven本地库添加Oracle JDB