渣渣小本求職複習之路天天一博客系列——數據庫基礎(MySQL)(5)

      前情回顧:昨天學習了MySQL中索引的設計與使用,還了解了一些常見的SQL注入攻擊的手段以及防範方法,通常來講,在面試的時候若是不是要求比較高,基本就夠用了。web

      今天遇見一個拿了TP-LINK的offer的同窗從圖書館回來,一邊走一邊聊了幾句。我笑着說:拿了offer還去圖書館幹嗎?他說沒打算去。我問幹嗎不去,他回答說準備專心考公務員。其實我前段時間,大概是半年前吧,也有考慮過考公務員。那時候主要是以爲本身技術渣,並且又不想去學,因此就經朋友介紹想考回深圳去工做。後來由於本身興趣培養得還不錯,並且也感受本身的性格不太適合進體制,也就做罷了。面試

  據說作了公務員或者進了國企技術就廢了,不知道是否是真的,你們比較有社會經驗和見識的不妨給樓主說說啊。正則表達式

      至於我本身嘛,專一複習基礎知識,專一提升本身的水平,找工做要緊。sql

————————————————————————————閒聊結束————————————————————————————————————————數據庫

  今天的任務,主要是複習存儲過程、函數、觸發器,以及瞭解學習部分數據庫優化的東西。如今,開始。性能優化

第九章:存儲過程、函數、觸發器服務器

      第一節:什麼是存儲過程、函數、觸發器數據庫設計

      存儲過程和函數是事先通過編譯並存儲在數據庫中的一段SQL語句的集合,調用存儲過程和函數能夠簡化應用開發人員的不少工做,減小數據在數據庫和應用服務器之間的傳輸,對於提升數據處理的效率是有好處的。而觸發器則是特殊的存儲過程,觸發器與存儲過程的惟一區別是觸發器不能執行EXECUTE語句調用,而是在用戶執行Transact-SQL語句時自動觸發執行。函數

 存儲過程和函數的區別在於函數必須有返回值,而存儲過程沒有,存儲過程的參數可使用IN、OUT、INOUT類型,而函數的參數只能是IN類型。性能

 其中,MySQL提供了多種內建函數幫助開發人員編寫簡單高效的SQL語句,其中經常使用的函數有字符串函數、日期函數和數值函數。有用到或者有興趣瞭解的童鞋能夠查詢MySQL文檔等相關資料。

 第二節:存儲過程和函數的注意事項

 在資料中,有對存儲過程和函數的相關操做進行講解,介紹了變量、條件、光標、流程控制的定義和使用,這些就不一一說明了。

 存儲過程和函數的優點是能夠將數據的處理放在數據庫服務器上進行,避免將大量的結果集傳輸給客戶端,減小數據的傳輸,可是在數據庫服務器上進行大量的複雜運算也會過分佔用服務器的CPU,形成數據庫服務器的壓力。因此,不要在存儲過程和函數中進行大量的複雜運算,應儘可能將這些運算操做分攤到應用服務器上執行。

 第三節:觸發器

 觸發器能夠查詢其餘表,並且能夠包含複雜的SQL語句。它們主要用於強制服從複雜的業務規則或要求。例如:您能夠根據客戶當前的賬戶狀態,控制是否容許插入新訂單。
觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關係。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。若是使用數據庫關係圖,則能夠在表之間建立關係以自動建立外鍵約束。
 

  須要注意的是觸發器是行觸發的。每次增長、修改或者刪除記錄都會觸發進行處理,編寫過於複雜的觸發器或者增長過多的觸發器對記錄的插入、更新、刪除操做確定也是會有比較嚴重的影響。所以數據庫設計的時候應該有所考慮,不要將應用的處理邏輯過多的依賴於觸發器來處理。

  

      接下來,會講一些關於數據庫性能優化的內容,今天先講一部分。

第十章:SQL技巧與優化

  第一節:SQL小技巧

      1.在SELECT等查詢語句中使用正則表達式

         什麼是正則表達式就很少說了,相信你們都知道。舉個例子,若是要實現如下包含正則表達式的SELECT語句

SELECT name , email from table where email REGEXP "@163[.,]com$";

         使用普通的LIKE語句,就要寫成下面這樣,明顯是比較長並且繁瑣的

SELECT name , email from table where email like"@163%.com" or like"@163%,com"

      2.RAND()函數與ORDER BY子句配合使用,可以實現隨機抽取樣本的功能,舉例就免了,這個技巧在進行數據統計的時候很方便。
      3.BIT函數與GROUP BY子句的聯合使用在某些應用場合能夠大大下降存儲量,提升統計查詢效率

       像這樣的小技巧有不少,知道一些,在面試中講出來能加點分。

  第二節:SQL優化

       首先,咱們來說講當面對一個有SQL性能問題的數據庫時,是怎樣一步步進行系統分析,定位問題SQL並儘快解決問題的。

第一步:經過show status命令瞭解各類SQL的執行頻率

第二步:定位執行效率較低的SQL語句

第三步:經過EXPLAIN分析低效SQL的執行計劃

第四步:肯定問題並採起相應的優化措施

       接下來,介紹兩個簡單實用的優化方法:

1.按期分析表和檢查表,語法以下:

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [,tbl_name]...

2.按期優化表(只對MyISAM、BDB和InnoDB表起做用),語法以下:

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

       須要注意的是,執行期間將對錶進行鎖定,所以必定注意要在數據庫不繁忙的時候執行相關的操做。

—————————————————————————————第十一天——————————————————————————————

  今天去了一場筆試,完了趕回來把今天的博客搞定。

1.隨着複習的推動,好多以前沒什麼印象的、沒怎麼學過的內容都出來了,要多花點時間才行。因爲進度緣由,數據庫(Mysql)系列就暫告一個段落了,明天開始下一個系列。

2.我打算明天寫一篇內容多點的,認真點的博客,仍是發首頁吧。

3.我打算,若是關注個人人多了,就在寫一些「文章」(不是如今所寫的「隨筆」),說一些我想說的話。

相關文章
相關標籤/搜索