前言
很多小伙伴都想進到一線大廠作業,但想要拿到這些大廠的offer是不容易的,提前做好一些面試準備也是很有必要的,很多人在面試前都會刷題,而MySQL 在面試中高頻出現,這里我給大家分享一些面試中與MySQL有關的一些問題,希望能對大家有所幫助,

mysql中char和varchar的區別?
char是固定長度字串,varchar是變長字串,變長字串的意思欄位內容鎖占的大小會隨著內容動態變化,
mysql中varchar(20)中的20指的是什么?
20在mysql5.0.3之前的版本中代表最大位元組數,后續版本代表最大字符數
什么是聚集索引?
原則上,索引與資料是分開存盤的,而在innodb存盤引擎中資料與主鍵索引是合并在一起的,資料存在主鍵索引對應的b+樹的葉子節點上,這里的主鍵索引就是聚集索引,
什么是最左綴原則?
索引實際上就是將資料組織為資料結構,比如B+樹資料結構,組織的程序實際就是對資料按指定的欄位進行排序,而指定的欄位就是想建立索引的欄位,所以索引底層實際上就是按指定欄位將資料進行排序,而排序的程序則類似字串的大小比較,比如想對a,b,c三個欄位進行排序,實際會先比較a欄位,a欄位相等就會比較b欄位,b欄位相等就會比較c欄位,依照這個規則將資料組織為一個棵B+樹,當我們給定條件來查詢資料時,實際上就是
拿這些條件去索引樹上進行快速查找,而查找的程序也需要將給定條件和B+樹節點中的資料進行比較,所以比較的時候也類似字串的大小比較,所以如果想利用索引進行快速查詢,那么給定條件時一定要先提供索引最左列的值,這樣才能進行比較,這就是最左前綴原則,
mysql中有哪些存盤引擎,各有什么特點?
innodb,這是目前mysql默認的,也是互聯網公司用的最多的,因為它支持事務、行鎖等,因為事務所以可以保證資料的完整性,因為行鎖所以課題提高資料庫的并發性,這兩點對互聯網公司來說是非常重要的,而這兩點myisam都是不支持的,innodb中資料和索引是在同一個檔案中,而myisam中資料和索引是分開的,myisam不支持事務,所以單純的操作會比innodb快,
innodb中有哪些事務隔離級別,每種隔離級別會出現什么現象,怎么修改事務隔離級別?
? READ UNCOMMITTED隔離級別下,可能發生 臟讀、** 不可重復讀 、幻讀** 問題,
? READ COMMITTED隔離級別下,可能發生 不可重復讀和 ** 幻讀 問題,但是不會發生臟讀 **問題,
? REPEATABLE READ隔離級別下,可能發生 幻讀問題,不會發生 臟讀和 ** 不可重復讀 ** 的問題,
? SERIALIZABLE隔離級別下,各種問題都不可以發生,
? 注意:這四種隔離級別是SQL的標準定義,不同的資料庫會有不同的實作,特別需要注意的是 MySQL 在REPEATABLE READ 隔離級別下,是可以禁止幻讀問題的發生的,
什么是幻讀?如何解決?mysql中會自動幫你解決嗎?
幻讀就是A事務在讀取資料程序,可能會讀出其他事務新增的資料,這個就是幻讀,mysql中已經幫我們解決了幻讀,是通過MVCC和間隙鎖來解決的,
查詢優化器的原理是什么?
查詢優化器手寫會針對SQL陳述句的條件進行簡單的優化,比如常量傳遞,等值傳遞,移除沒用的條件,
如果是單表查詢,那么查詢優化器會分別計算全表掃描和能利用的索引的成本,從中選取最優的執行路徑作為最終的執行方式,
如果是多表查詢,那么查詢優化器會盡可能優化為JOIN,優化為JOIN后就可以進行小表驅動大表,
explain陳述句中type為index代表什么意思?
type為ALL時代表全表掃描,type為index代表索引掃描,意思是會掃描對應索引中的所有葉子節點,
explain陳述句中extra為using index代表什么意思?
走的覆寫索引
explain陳述句中extra為using index condition代表什么意思?
用了索引下推
你知道MVCC嗎?
多版本并發控制,主要在select陳述句中會用到,也是讀已提交和可重復讀兩種隔離級別的實作方式,MVCC可以提高讀寫的并發效率
小編還整理了一些面試題答案和MySQL學習思維腦圖,這里分享給大家
領資料點這里暗號CSDN


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137028.html
標籤:python
