Mysql面試複習總結

來源:互聯網
上載者:User

標籤:失敗   兩個指標   組成   最簡   5.0   row   預設   結果   效能最佳化   

三範式

三範式定義(範式和反範式)

1NF:每個資料項目都是最小單元,不可分割,確定行列之後只能對應一個資料。

2NF:每一個非主屬性完全依賴於候選碼(屬性群組的值能唯一的標識一個元組,但是其子集不可以)。?

3NF:每一個非主屬性既不傳遞依賴於,也不部分依賴於(主碼=候選碼為多個市,從中選出一個作為主碼)。

BCNF主屬性(候選碼中的某一個屬性)內部也不能部分或傳遞依賴於碼。

4NF :沒有多值依賴。

資料類型

MySQL資料類型-菜鳥教程 

MYSQL中資料類型介紹

整數: int(m)裡的m是表示資料顯示寬度,浮點數,定點數。

字串:char(n)4.0 n 代表位元組,5.0 n 代表字元 (UTF-8=3zj,GBK=2zj)

 char 固定的字元數,空格補上;檢索速度快。

 varchar 字元數+1個位元組(n<=255)或2個位元組(n>255)

 text 字元數+2個位元組;不能有預設值;索引要指定前多少個字元;文本方式儲存

 blob 二進位方式儲存

儲存引擎

各種儲存引擎的區別與聯絡     (儲存資料技術和策略,儲存機制、索引技巧、鎖定水平等)

資料庫儲存引擎     show table status 顯示表的相關資訊

InnoDB與MyISAM的比較(從5.7開始innodb儲存引擎成為預設的儲存引擎。)

 鎖機制:行級鎖,表級鎖

 事務操作:事務安全,不支援

InnoDB (1)可靠性要求比較高,要求事務;(2)表更新和查詢都相當的頻繁,並且行鎖定的機會比較大的情況。

 MySQL4.1之後每個表的資料和索引儲存在一個檔案裡。

 InnoDB 採用了MVCC來支援高並發,並且實現了四個標準的隔離等級。其預設層級是REPEATABLE READ(可重複讀) ,行級鎖。

 自動災難恢複。與其它儲存引擎不同,InnoDB表能夠自動從災難中恢複。

 外鍵約束。MySQL支援外鍵的儲存引擎只有InnoDB。

 支援自動增加列AUTO_INCREMENT屬性。

MyIsam  (1)做很多count 的計算;(2)插入不頻繁,查詢非常頻繁;(3)沒有事務。

 表格儲存體在兩個檔案中,資料檔案(MYD)和索引檔案(MYI)

 表級鎖,讀=共用鎖定,寫=排它鎖。

 適合選擇密集型的表,插入密集型的表。

資料庫ACID

資料庫的ACID

資料庫事務介紹

原子性(Atomicity)一個事務必須被視為一個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交成功,要麼全部失敗復原,對於一個事務來說,不可能只執行其中的一部分操作。

一致性(Consistency)資料庫總是從一個一致性的狀態轉換到另一個一致性的狀態。

隔離性(Isolation)一個事務所做的修改在最終提交以前,對其他事務是不可見的。

持久性(Durability)一旦事務提交,則其所做的修改不會永久儲存到資料庫。

4 種隔離等級

MVVC的簡單介紹

READ UNCOMMITTED(未提交讀)髒讀:事務中的修改,即使沒有提交,對其他事務也都是可見的。

READ COMMITTED(提交讀)不可重複讀取:事務從開始直到提交之前,所做的任何修改對其他事務都是不可見的。

REPEATABLE READ(可重複讀):幻讀:一個事務按相同的查詢條件讀取以前檢索過的資料,其他事務插入了滿足其查詢條件的新資料。產生幻行。

SERIALIZABLE(可序列化) 強制事務串列執行

MVVC是個行級鎖的變種,它在普通讀情況下避免了加鎖操作,自特定情況下加鎖

Mysql死結問題

Mysql悲觀鎖總結和實踐

Mysql樂觀鎖總結和實踐

SELECT ... LOCK IN SHARE MODE SELECT ... FOR UPDATE:(LOCK IN SHARE MODE 在有一方事務要Update 同一個表單時很容易造成死結)

樂觀鎖:取鎖失敗,產生回溯時影響效率。

 取資料時認為其他線程不會對資料進行修改。

 更新時判斷是否對資料進行修改,版本號碼機制或CAS操作。

悲觀鎖:每次取資料都會加鎖。

innodb_lock_wait_timeout 等待鎖逾時復原事務:  【逾時法】

直觀方法是在兩個事務相互等待時,當一個等待時間超過設定的某一閥值時,對其中一個事務進行復原,另一個事務就能繼續執行。在innodb中,參數innodb_lock_wait_timeout用來設定逾時時間。

wait-for graph演算法來主動進行死結檢測:  【等待圖法】

innodb還提供了wait-for graph演算法來主動進行死結檢測,每當加鎖請求無法立即滿足需要並進入等待時,wait-for graph演算法都會被觸發。

索引

索引(儲存引擎 快速找到記錄的一種資料結構,索引的準系統)

什麼是B-Tree

MySQL索引背後的資料結構及演算法原理

MySQL效能最佳化-慢查詢分析、最佳化索引和配置

索引類型:

 B-Tree索引 索引列的順序影響者是否使用索引。

 雜湊索引

 無法用於排序。

 只支援全部匹配。

 只支援等值比較。

 有很多雜湊衝突時,效率不太高。

 空間資料索引(R-Tree)無需首碼查詢,從所有維度查詢資料。

 全文檢索索引 尋找文本中的關鍵詞,類似於搜尋引擎做的事情。

 具體類型介紹:

單列索引:不允許為空白

 普通索引 不允許有空值

 唯一索引

 主鍵索引 在 InnoDB 引擎中很重要

組合引擎:多個欄位上建立的索引,複合索引時遵循最左首碼原則。

 查詢中某個列有範圍查詢,則其右邊的所有列都無法使用查詢

全文索引:

空間索引:

參考:細說mysql索引、我的MYSQL學習心得(九) 索引

MySQL索引詳解 ( 一般使用磁碟I/O次數評價索引結構的優劣。

 磁碟存取原理

 局部性原理與磁碟預讀

M 階 B-Tree

 

 根節點至少有2個子樹。

 每個非葉子節點由n-1個key和n個指標組成。

 分支節點至少擁有m/2顆子樹,最多擁有m個子樹。(除根節點和葉子結點外)

 所有分葉節點具有相同的深度,等於樹高 h。

 每個葉子節點最少包含一個key和兩個指標,最多包含2d-1個key和2d個指標。

B+ Tree

 內節點不儲存data,只儲存key。

 葉子節點不儲存指標。

MySQL 索引實現

 MyISAM 索引檔案和資料檔案是分離,非叢集索引。

 InnoDB 分葉節點包含了完整的資料記錄,叢集索引。根據主鍵聚集。

EXPLAIN 欄位介紹

 possible_keys:顯示可能應用在這張表中的索引。

 key:實際使用的索引。

 key_len:使用的索引的長度,越短越好。

 ref:顯示索引的哪一列被使用了。

 rows:MySQL認為必須檢索的用來返回請求資料的行數。

 type:使用了何種類型。從最好到最差的連線類型為system、const(常量)、eq_ref、ref、range、index(索引全表掃描)和ALL(全表掃描)。

視圖  

MySQL資料庫檢視

MySQL - 視圖演算法

視圖最簡單的實現方法是把select語句的結果存放到暫存資料表中。具有效能問題,最佳化器很難最佳化暫存資料表上的查詢。

 合并演算法 :select語句與外部查詢檢視的select語句進行合并,然後執行。

 暫存資料表演算法 :先執行視圖的select語句,後執行外部查詢的語句。

視圖在某些情況下可以提升效能,並和其他提升效能的方式疊加使用。

 視圖不可以跨表進行修改資料,

 建立有條件限制的視圖時,加上“WITH CHECK OPTION”命令。

觸發器

 觸發器的觸發事件 , 可以是 INSERT 、UPDATE 或者 DELETE 。

 觸發時間 , 可以是 BEFORE 或者 AFTER。

 同一個表相同觸發時間的相同觸發事件 , 只能定義一個觸發器,只支援基於行觸發。

 觸發器的原子性,InnoDB支援事務,MyISAM不支援。

事件

     類似於Linux的定時任務,某個時間或者每隔一段時間執行一段SQL代碼。

備份

資料備份(深入淺出Mysql 27章 備份與恢複)

 全備份與增量備份的比較。

 確保 MySQL 開啟 log-bin 選項,有了 BINLOG,MySQL 才可以在必要的時候做完 整恢複,或基於時間點的恢複,或基於位置的恢複。

邏輯備份(將資料庫中的資料備份為一個文字檔,備份的檔案可以被查 看和編輯。)

物理備份

 冷備份:cp移動資料檔案的方法。

 恢複:移動資料檔案,使用 mysqlbinlog 工具恢複自備份以來的所有 BINLOG。

 熱備份:(將要備份的表加讀鎖,然後再 cp 資料檔案到備份目錄。)

 MyISAM:mysqlhotcopy工具。

 ibbackup 是 Innobase 公司(www.innodb.com)的一個熱備份工具。

恢複

     完全恢複

 將備份作為輸入執行。

 將備份後執行的日誌進行重做。

     不完全恢複(跳過誤動作陳述式,再恢複後 面執行的語句,完成我們的恢複。)

 基於時間點的操作。跳過故障發生時間。

 基於位置的恢複。找到出錯語句的位置號,並跳過位置區間。

 

日誌

錯誤記錄檔:記錄了當 mysqld 啟動和停止時,以及伺服器在 運行過程中發生任何嚴重錯誤時的相關資訊。

二進位檔案:記錄了所有的 DDL(資料定義語言 (Data Definition Language))語句和 DML(資料操縱語言) 語句,不包括資料查詢語句。語句以“事件”的形式儲存,它描述了資料的更改過程。(定期刪除日誌,預設關閉)。

查詢日誌:記錄了用戶端的所有語句,格式為純文字格式,可以直接進行讀取。(log 日誌中記錄了所有資料庫的操作,對於訪問頻繁的系統,此日誌對系統效能的影響較大,建議關閉,預設關閉)。

慢查詢日誌:慢查詢日誌記錄了包含所有執行時間超過參數long_query_time(單位:秒)所設定值的 SQL 陳述式的日誌。(純文字格式)MySQL記錄檔之錯誤記錄檔和慢查詢日誌詳解。

記錄檔小結:

 系統故障時,建議首先查看錯誤記錄檔,以協助使用者迅速定位故障原因。

 記錄資料的變更、資料的備份、資料的複製等操作時,開啟二進位日誌。預設不記錄此日誌,建議通過--log-bin 選項將此日誌開啟。

 如果希望記錄資料庫發生的任何操作,包括 SELECT,則需要用--log 將查詢日誌開啟, 此日誌預設關閉,一般情況下建議不要開啟此日誌,以免影響系統整體效能。

 查看系統的效能問題, 希望找到有效能問題的SQL語 句,需要 用 --log-slow-queries 開啟慢查詢日誌。對於大量的慢查詢日誌,建議使用 mysqldumpslow 工具 來進行匯總查看。

Mysql面試複習總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.