MySQL 面試系列:MySQL 基礎(chǔ)模塊的面試題總結(jié)

其它MySQL 面試系列:

MySQL 面試系列:MySQL查詢?nèi)绾芜M(jìn)行優(yōu)化?

MySQL 面試系列:一條select語句在MySQL是這樣執(zhí)行的?
MySQL 面試系列:MySQL 常見的開放性問題
MySQL 面試系列:MySQL 性能優(yōu)化 & 分布式

MySQL 面試系列:MySQL 命令和內(nèi)置函數(shù)
MySQL 面試系列:MySQL 中日志的面試題總結(jié)
MySQL 面試系列:MySQL 中鎖的面試題總結(jié)

MySQL 面試系列:MySQL 事務(wù)的面試題總結(jié)
MySQL 面試系列:MySQL 索引的面試題總結(jié)
MySQL 面試系列:MySQL 基礎(chǔ)模塊的面試題總結(jié)


說一下 MySQL 執(zhí)行一條查詢語句的內(nèi)部執(zhí)行過程崇呵?

  • 客戶端先通過連接器連接到 MySQL 服務(wù)器蚓挤。
  • 連接器權(quán)限驗(yàn)證通過之后,先查詢是否有查詢緩存涛目,如果有緩存(之前執(zhí)行過此語句)則直接返回緩存數(shù)據(jù)联四,如果沒有緩存則進(jìn)入分析器。
  • 分析器會(huì)對(duì)查詢語句進(jìn)行語法分析和詞法分析,判斷 SQL 語法是否正確,如果查詢語法錯(cuò)誤會(huì)直接返回給客戶端錯(cuò)誤信息正林,如果語法正確則進(jìn)入優(yōu)化器。
  • 優(yōu)化器是對(duì)查詢語句進(jìn)行優(yōu)化處理颤殴,例如一個(gè)表里面有多個(gè)索引卓囚,優(yōu)化器會(huì)判別哪個(gè)索引性能更好。
  • 優(yōu)化器執(zhí)行完就進(jìn)入執(zhí)行器诅病,執(zhí)行器就開始執(zhí)行語句進(jìn)行查詢比對(duì)了,直到查詢到滿足條件的所有數(shù)據(jù)粥烁,然后進(jìn)行返回贤笆。

MySQL 提示“不存在此列”是執(zhí)行到哪個(gè)節(jié)點(diǎn)報(bào)出的?

此錯(cuò)誤是執(zhí)行到分析器階段報(bào)出的讨阻,因?yàn)?MySQL 會(huì)在分析器階段檢查 SQL 語句的正確性芥永。

MySQL 查詢緩存的功能有何優(yōu)缺點(diǎn)?

MySQL 查詢緩存功能是在連接器之后發(fā)生的钝吮,它的優(yōu)點(diǎn)是效率高埋涧,如果已經(jīng)有緩存則會(huì)直接返回結(jié)果板辽。 查詢緩存的缺點(diǎn)是失效太頻繁導(dǎo)致緩存命中率比較低,任何更新表操作都會(huì)清空查詢緩存棘催,因此導(dǎo)致查詢緩存非常容易失效劲弦。

如何關(guān)閉 MySQL 的查詢緩存功能?

MySQL 查詢緩存默認(rèn)是開啟的醇坝,配置 querycachetype 參數(shù)為 DEMAND(按需使用)關(guān)閉查詢緩存邑跪,MySQL 8.0 之后直接刪除了查詢緩存的功能。

MySQL 的常用引擎都有哪些呼猪?

MySQL 的常用引擎有 InnoDB画畅、MyISAM、Memory 等宋距,從 MySQL 5.5.5 版本開始 InnoDB 就成為了默認(rèn)的存儲(chǔ)引擎轴踱。

MySQL 可以針對(duì)表級(jí)別設(shè)置數(shù)據(jù)庫引擎嗎?怎么設(shè)置谚赎?

可以針對(duì)不同的表設(shè)置不同的引擎淫僻。在 create table 語句中使用 engine=引擎名(比如Memory)來設(shè)置此表的存儲(chǔ)引擎。完整代碼如下:

create table student(
   id int primary key auto_increment,
   username varchar(120),
   age int
) ENGINE=Memory

常用的存儲(chǔ)引擎 InnoDB 和 MyISAM 有什么區(qū)別沸版?

InnoDB 和 MyISAM 最大的區(qū)別是 InnoDB 支持事務(wù)嘁傀,而 MyISAM 不支持事務(wù),它們主要區(qū)別如下:

  • InnoDB 支持崩潰后安全恢復(fù)视粮,MyISAM 不支持崩潰后安全恢復(fù)细办;
  • InnoDB 支持行級(jí)鎖,MyISAM 不支持行級(jí)鎖蕾殴,只支持到表鎖笑撞;
  • InnoDB 支持外鍵,MyISAM 不支持外鍵钓觉;
  • MyISAM 性能比 InnoDB 高茴肥;
  • MyISAM 支持 FULLTEXT 類型的全文索引,InnoDB 不支持 FULLTEXT 類型的全文索引荡灾,但是 InnoDB 可以使用 sphinx 插件支持全文索引瓤狐,并且效果更好;
  • InnoDB 主鍵查詢性能高于 MyISAM批幌。

InnoDB 有哪些特性础锐?

1)插入緩沖(insert buffer):對(duì)于非聚集索引的插入和更新,不是每一次直接插入索引頁中荧缘,而是首先判斷插入的非聚集索引頁是否在緩沖池中皆警,如果在,則直接插入截粗,否則信姓,先放入一個(gè)插入緩沖區(qū)中鸵隧。好似欺騙數(shù)據(jù)庫這個(gè)非聚集的索引已經(jīng)插入到葉子節(jié)點(diǎn)了,然后再以一定的頻率執(zhí)行插入緩沖和非聚集索引頁子節(jié)點(diǎn)的合并操作意推,這時(shí)通常能將多個(gè)插入合并到一個(gè)操作中豆瘫,這就大大提高了對(duì)非聚集索引執(zhí)行插入和修改操作的性能。

2)兩次寫(double write):兩次寫給 InnoDB 帶來的是可靠性左痢,主要用來解決部分寫失敗(partial page write)靡羡。doublewrite 有兩部分組成,一部分是內(nèi)存中的 doublewrite buffer 俊性,大小為 2M略步,另外一部分就是物理磁盤上的共享表空間中連續(xù)的 128 個(gè)頁,即兩個(gè)區(qū)定页,大小同樣為 2M趟薄。當(dāng)緩沖池的作業(yè)刷新時(shí),并不直接寫硬盤典徊,而是通過 memcpy 函數(shù)將臟頁先拷貝到內(nèi)存中的 doublewrite buffer杭煎,之后通過 doublewrite buffer 再分兩次寫,每次寫入 1M 到共享表空間的物理磁盤上卒落,然后馬上調(diào)用 fsync 函數(shù)羡铲,同步磁盤。如下圖所示

avatar

3)自適應(yīng)哈希索引(adaptive hash index):由于 InnoDB 不支持 hash 索引儡毕,但在某些情況下 hash 索引的效率很高也切,于是出現(xiàn)了 adaptive hash index 功能, InnoDB 存儲(chǔ)引擎會(huì)監(jiān)控對(duì)表上索引的查找腰湾,如果觀察到建立 hash 索引可以提高性能的時(shí)候雷恃,則自動(dòng)建立 hash 索引。

一張自增表中有三條數(shù)據(jù)费坊,刪除了兩條數(shù)據(jù)之后重啟數(shù)據(jù)庫倒槐,再新增一條數(shù)據(jù),此時(shí)這條數(shù)據(jù)的 ID 是幾附井?

如果這張表的引擎是 MyISAM讨越,那么 ID=4,如果是 InnoDB 那么 ID=2(MySQL 8 之前的版本)永毅。

MySQL 中什么情況會(huì)導(dǎo)致自增主鍵不能連續(xù)谎痢?

以下情況會(huì)導(dǎo)致 MySQL 自增主鍵不能連續(xù):

  • 唯一主鍵沖突會(huì)導(dǎo)致自增主鍵不連續(xù);
  • 事務(wù)回滾也會(huì)導(dǎo)致自增主鍵不連續(xù)卷雕。

InnoDB 中自增主鍵能不能被持久化?

自增主鍵能不能被持久化票从,說的是 MySQL 重啟之后 InnoDB 能不能恢復(fù)重啟之前的自增列漫雕,InnoDB 在 8.0 之前是沒有持久化能力的滨嘱,但 MySQL 8.0 之后就把自增主鍵保存到 redo log(一種日志類型,下文會(huì)詳細(xì)講)中浸间,當(dāng) MySQL 重啟之后就會(huì)從 redo log 日志中恢復(fù)太雨。

什么是獨(dú)立表空間和共享表空間?它們的區(qū)別是什么魁蒜?

共享表空間:指的是數(shù)據(jù)庫的所有的表數(shù)據(jù)囊扳,索引文件全部放在一個(gè)文件中,默認(rèn)這個(gè)共享表空間的文件路徑在 data 目錄下兜看。 獨(dú)立表空間:每一個(gè)表都將會(huì)生成以獨(dú)立的文件方式來進(jìn)行存儲(chǔ)锥咸。 共享表空間和獨(dú)立表空間最大的區(qū)別是如果把表放再共享表空間,即使表刪除了空間也不會(huì)刪除细移,所以表依然很大搏予,而獨(dú)立表空間如果刪除表就會(huì)清除空間。

如何設(shè)置獨(dú)立表空間弧轧?

獨(dú)立表空間是由參數(shù) innodbfileper_table 控制的雪侥,把它設(shè)置成 ON 就是獨(dú)立表空間了,從 MySQL 5.6.6 版本之后精绎,這個(gè)值就默認(rèn)是 ON 了速缨。

如何進(jìn)行表空間收縮?

使用重建表的方式可以收縮表空間代乃,重建表有以下三種方式:

  • alter table t engine=InnoDB
  • optmize table t
  • truncate table t

說一下重建表的執(zhí)行流程旬牲?

  • 建立一個(gè)臨時(shí)文件,掃描表 t 主鍵的所有數(shù)據(jù)頁襟己;
  • 用數(shù)據(jù)頁中表 t 的記錄生成 B+ 樹引谜,存儲(chǔ)到臨時(shí)文件中;
  • 生成臨時(shí)文件的過程中擎浴,將所有對(duì) t 的操作記錄在一個(gè)日志文件(row log)中员咽;
  • 臨時(shí)文件生成后,將日志文件中的操作應(yīng)用到臨時(shí)文件贮预,得到一個(gè)邏輯數(shù)據(jù)上與表 t相同的數(shù)據(jù)文件贝室;
  • 用臨時(shí)文件替換表 t 的數(shù)據(jù)文件。

表的結(jié)構(gòu)信息存在哪里仿吞?

還有 61% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
支付 ¥4.99 繼續(xù)閱讀
  • 序言:七十年代末滑频,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子唤冈,更是在濱河造成了極大的恐慌峡迷,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異绘搞,居然都是意外死亡彤避,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門夯辖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琉预,“玉大人,你說我怎么就攤上這事蒿褂≡裁祝” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵啄栓,是天一觀的道長(zhǎng)娄帖。 經(jīng)常有香客問我,道長(zhǎng)谴供,這世上最難降的妖魔是什么块茁? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮桂肌,結(jié)果婚禮上数焊,老公的妹妹穿的比我還像新娘。我一直安慰自己崎场,他們只是感情好佩耳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谭跨,像睡著了一般干厚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上螃宙,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天蛮瞄,我揣著相機(jī)與錄音,去河邊找鬼谆扎。 笑死挂捅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的堂湖。 我是一名探鬼主播闲先,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼无蜂!你這毒婦竟也來了伺糠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤斥季,失蹤者是張志新(化名)和其女友劉穎训桶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渊迁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年慰照,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琉朽。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖稚铣,靈堂內(nèi)的尸體忽然破棺而出箱叁,到底是詐尸還是另有隱情,我是刑警寧澤惕医,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布耕漱,位于F島的核電站,受9級(jí)特大地震影響抬伺,放射性物質(zhì)發(fā)生泄漏螟够。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一峡钓、第九天 我趴在偏房一處隱蔽的房頂上張望妓笙。 院中可真熱鬧,春花似錦能岩、人聲如沸寞宫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辈赋。三九已至,卻和暖如春膏燕,著一層夾襖步出監(jiān)牢的瞬間钥屈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工坝辫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留篷就,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓阀溶,卻偏偏與公主長(zhǎng)得像腻脏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子银锻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容