mysql優化筆記--基礎知識整理回顧

eBusinessMan發表於2015-03-16

第一部分:基礎知識:

l ) Mysql 優化:(這是一個綜合性的問題,主要有以下幾方面的綜合作用達到優化效果)

1.      表的設計要合理化(符合3NF);

2.      適當建立索引

3.      儲存過程(因為儲存過程已經是二進位制的資料庫物件,這樣就避免了sql語句的編譯);

4.      表的分割(水平分割和垂直分割);

5.      讀寫分離(讀:select;寫:update,insert,delete)

6.      定時升級伺服器硬體和清除資料庫中廢資料

2)   資料庫的三層結構:程式,DBMS和資料庫檔案(程式和DBMS互動,DBMS和資料庫檔案互動後再返回結果給程式)。

l3)  儲存過程比普通sql語句效率高的原因:程式將sql語句傳遞給DBMSDBMSsql語句進行編譯,執行和把執行結果快取起來;由於儲存過程已經是二進位制的資料庫物件,這樣就避免了sql語句的編譯,可以直接執行!其次,就是模組化程式設計。

4)   關係型資料庫之所以稱之為“關係型”,是因為表之間存在附屬(依賴)關係,例如評論表中的每一條評論記錄都是屬於user表中的一個使用者的,每個部門員工都是屬於現實中存在的某一個部門的。

5)  3NF的真正深入理解:1NF:是指表中欄位所指的意思是明確的,不可分解的,例如user表中的address欄位,如果是“中國廣東廣州天河龍洞”,那麼這個值也是明確的,可以指定一個地方而不會有歧義或者是範圍很泛。在所有的關係型資料庫中,預設建立欄位都是符合1NF的;2NF:是指表中的記錄都是唯一的,就是說要有主鍵,在此要注意的是,一般主鍵的設計都是:不涉及業務邏輯,而且都是自增長的(例如商品表一般不會使用商品的id作為主鍵,而是另外採用自增長的數字),原因是自增長:可以保證表中的記錄符合2NF,不涉及業務邏輯:可以確保記錄的穩定性,不會被程式修改而變動;3NF:是指資料庫中不要存在資料冗餘,一般會出現在欄位上,分別是一張表的欄位間可以相互推匯出來和多張表之間的欄位可以推匯出來,例如一張部門表(departmentId,departmentName)和一張員工表(employeeIdname,money,departmentId, departmentName),這樣就存在冗餘,因為完全可以通過departmentId來推匯出departmentName。但是要注意的是,並非符合3NF的設計的資料庫就是好的資料庫,有時候如果太按照概念來設計的話,會間接地增加了伺服器的負擔,例如現在要計算每個部門的員工薪酬總和,那麼就得每次都將兩張表連線一次再聚合,還不如直接在部門表中增加totalMoney欄位就可以直接獲取,省掉了連線(這個例子在這方面體現不是明顯,你可以想想QQ空間中的相簿表和圖片表,如果要統計每個相簿的圖片的瀏覽次數的話,一億個人訪問的話就得連線一億次!!!),所以我們往往會因為實際情況來降低正規化(就是增加欄位)。

5)  dual:是一張表,稱為:亞元表。
6)  
通過cmd輸入:netstat後各選項的理解:內部地址,外部地址和如何kill掉連

(其實就是kill掉此連線對應的程式idPID;

7)圖形化介面工具Navicat中的新建的一個連線(例如這個軟體安裝時預設自動建立的連線,名字是mysql)則是同一個使用者的一次連線(應該叫session吧)。一個使用者可以有很多次連線(session)!!

8)show [global/session] status [ like ‘#####’];作為一個DBA,必須要把此命令下的所有的命令都熟悉;如果是程式設計師的話,直到常用的幾個即可!




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29900383/viewspace-1461548/,如需轉載,請註明出處,否則將追究法律責任。

相關文章