你需要了解的SQL知識

   對SQL的瞭解,其實已經有些年頭,但一直的應用都是建表,各種範式也是知道的。使用視圖,存儲過程,建立索引,觸發器,使用遊標,自建函數,這些東東感覺對數據庫的瞭解還算可以,日常的工作需要都可以處理。但伴隨着項目的深入和理解的增加,發現所知道的竟是SQL知識的皮毛,接下來將對最近一段時間對數據庫的操作和認識,記錄成檔,以便日後查閱,同時也供需要的朋友參看。

建表知識

對於建表大家都不陌生,這裏主要說明一下幾點注意實現:

1、大數據字段最好剝離出單獨的表,以便影響性能
2、使用varchar,代替char,這是因爲varchar會動態分配長度,char指定爲20,即時你存儲字符“1”,它依然是20的長度  
3、給表建立主鍵,看到好多表沒主鍵,這在查詢和索引定義上將有一定的影響
4、避免表字段運行爲null,如果不知道添加什麼值,建議設置默認值,特別int類型,比如默認值爲0,在索引查詢上,效率立顯。
5、建立索引,聚集索引則意味着數據的物理存儲順序,最好在唯一的,非空的字段上建立,其它索引也不是越多越好,索引在查詢上優勢顯著,在頻繁更新數據的字段上建立聚集索引,後果很嚴重,插入更新相當忙。
6、組合索引和單索引的建立,要考慮查詢實際和具體模式.

SQL語句
熟悉SQL的人,都會寫SQL語句,但到底效率如何,十萬以下的數據量,根本沒任何區別,但一些基礎性的東西,還是得點滴做起
1、where語句的書寫,當有多個查詢條件時,sql是按照從右往左的順序進行執行,也就是說寫在最後的條件會最早被執行,這就意味着過濾數據量最多的添加應該寫在最後,這樣才能在性能上達到最優
2、join語句,如果A表1000w,B表30條記錄,則應該是A join B,sql執行會以B爲準去關聯A,性能顯著
3、表變量和臨時表 ,這個問題可能有些同學稍陌生,所謂表變量就是declare @dd  table類似這樣的聲明,而臨時表多見#tt,這樣的格式這二者在sql內是區別對待的表變量功能有限,使用完自動釋放,臨時表計劃就是有數據表的大部分功能,使用完畢後需要刪除,在數據庫tempdb也有對應的操作記錄,使用時應該綜合考慮。
4、注意聚合函數,is null,<>等的使用,當我們在這樣使用的時候,可能習以爲常,在大數據量處理上,本有的索引將不再被使用,而變成全表掃描,So ga等吧,性能大大的慢,如where  len(studentId)=0,本來在studentid上的索引變成全表掃描了。
5、使用exist代替not in,這個大家都知道,但還是希望大家注意下
6、select AA,BB,代替Select * ,這是大部分程序員的通病,總覺得無所謂,其實select * 在sql執行時還是要遍歷到具體的字段名進行讀取,即使我們要使用全部列,也推薦使用把各個字段都羅列處理,而非使用*
7、top n 和order by 你瞭解多少?我一直覺得where條件查詢完後order by在此基礎上進行排序,其實錯了,在有top n和order by一塊使用時,order by竟然是全表掃描,具體可以通過查詢計劃驗證。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章