MySQL常見面試題及答案

2021-10-04 10:59:00 字數 3146 閱讀 7983

1).使用索引的原則

a.對於查詢頻率高的字段建立索引;

b.對排序、分組、聯合查詢頻率高的字段建立索引;

c.索引的數目不宜太多(每乙個索引都會占用相應的物理控制項,過多的索引會導致增刪改語句執行效率低)

d.盡量選擇唯一性索引,可以更快速的通過索引來確定某條記錄。

e.盡量使用資料量少的索引,如果索引的值很長會影響查詢速度。

f.不要選擇命中率低的索引。比如 status的值只有0 1 ,建立乙個索引就沒有意義。

2).b+tree和btree的區別

a.在btree中,越靠近跟節點的記錄查詢時間越快,只要找到關鍵字即可確定記錄的存在,而在b+tree中每個記錄的查詢時間基本上都是一樣的,都需要從跟節點走到子節點,而且在子節點中還要再比較關鍵字。從這個角度看btree要比b+tree好,而在實際應用中卻是b+tree效能好。因為b+tree的非葉子節點不存放實際的資料,這樣每個節點可容納的元素個數比btree多,這樣帶來的好處是減少磁碟訪問次數。

3).btree 和 hash索引的區別

a.hash僅支援=、>、>=、<、<=、between。btree可以支援like模糊查詢(不能以%開頭),使用%開頭則不會使用索引。

c.聯合索引中,hash索引不能利用部分索引鍵查詢。對於聯合索引中的多個列,hash是要麼全部使用,要麼全部不使用。

e.因為hash索引比較的是經過hash計算的值,所以只能進行等式比較,不能用於範圍查詢。

f.hash每次都要全表掃瞄。

g.當雜湊值大量重複且資料量非常大時,其檢索效率並沒有btree索引高。

1).儲存引擎1.myisam、2.innodb、3.memory、4.merge、5.blackhole、6.csv、7.archive、8.federate。

a.innodb:mysql5.5.5以後預設的儲存引擎,支援事務、行級鎖定和外來鍵、災難恢復性好

b.myisam:myisam 擁有較高的插入、查詢速度,但不支援事務、使用表級鎖,併發性差。在 mysql5.5.5 之前的版本中,myisam 是預設的儲存引擎。

c.memory:提供記憶體表,也不支援事務和外來鍵。顯著提高訪問資料的速度,可用於快取會頻繁訪問的、可以重構的資料、計算結果、統計值、中間結果。使用表級鎖,雖然記憶體訪問快,但如果頻繁的讀寫,表級鎖會成為瓶頸。只支援固定大小的行。varchar型別的字段會儲存為固定長度的char型別,浪費空間。

2).mysql儲存引擎myisam與innodb如何選擇:

a.innodb支援事務而myinsam不支援。

c.myisam適合查詢以及插入為主的應用,innodb適合頻繁修改以及涉及到安全性較高的應用

d.innodb支援外來鍵,myisam不支援

e.從mysql5.5.5以後,innodb是預設引擎

總之,現在一般都是選用innodb了,主要是myisam的全表鎖,讀寫序列問題,併發效率鎖表,效率低,myisam對於讀寫密集型應用一般是不會去選用的。

a.myisam型別不支援事務處理等高階處理,而innodb型別支援。

b.myisam型別的表強調的是效能,其執行速度比innodb型別更快,但是不提供事務支援,而innodb提供事務支援已經外部鍵等高階資料庫功能。

1).事務就是乙個程式執行單元,裡邊的操作要麼全部執行,要麼全部都不執行。事務是必須滿足4個條件(acid)

a.原子性乙個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

b.一致性在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。

c.隔離性:資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致。事務隔離分為不同級別,包括讀未提交(read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和序列化(serializable)。

d.永續性事務處理結束後,對資料的修改就是永久的,即便系統故障也不會丟失。

2).事務隔離性問題

a.髒讀:指乙個事務讀取到另外乙個事務未提交的資料。

b.幻讀:指乙個事務讀取到另外乙個事務已提交的資料。

c.不可重複讀:指乙個執行緒中的事務讀取到了另外乙個執行緒中提交的update的資料。

3).事務的隔離級別

a.未提交讀(read uncommitted):可能髒讀、可能幻讀、可能不可重複。

b.讀已提交(read committed):可能髒讀

c.可重複讀(repeatable read):可能幻讀

d.序列化(serializable ):讀寫加鎖,最高的隔離級別,級別越高,資料越安全,但效能越低。

4).預設是可重複讀,實際專案還是使用讀已提交級別。

a.在可重複讀隔離級別下,存在間隙鎖,導致出現死鎖的機率比讀已提交大的多。

b.在可重複讀隔離級別下,條件列未命中索引會鎖表!而在讀已提交隔離級別下,只鎖行。

c.在讀已提交隔離級別下,半一致性(semi-consistent)特性增加了update操作的併發性!

a.required:預設的傳播級別支援當前事務,如果當前有事務則加入事務,沒有則建立乙個新的事務。

b.supports:支援當前事務,如果當前沒有事務,則以非事務方式執行。

c.mandatory:支援當前事務,如果當前沒有事務,則丟擲異常。

d.requires_new:新建事務,如果當前有事務,則掛起。

e.not_supported:以非事務方式執行,如果當前有事務,則掛起。

f.never:以非事務方式執行,如果當前存在事務,則丟擲異常

g.nested:支援當前事務,如果當前有事務,就在當前事務中巢狀其他事務。如果沒有則新建事務。父事務回滾當前事務也會回滾。

hr常見面試題及答案

1 簡單自我介紹 檢視答案 2 你為什麼想離開現在的工作單位?檢視答案 3 你現在找工作,考慮的幾個最重要的因素有哪些?檢視答案 4 你對我們公司了解有多少?檢視答案 5 你對自己未來有什麼規劃,想走技術路線還是管理路線 檢視答案 6 你對期望的薪資是多少 檢視答案 7 你有什麼優點 檢視答案 8 ...

單鏈表常見面試題及答案

一 單鏈表結點的刪除 0 刪除單鏈表p指向的那個元素,時間和空間複雜度盡量小 二 單鏈表的訪問 1 找出單鏈表的倒數第k個元素,僅允許遍歷一遍鍊錶 2 找出單鏈表的中間元素,僅允許遍歷一遍鍊錶 三 單鏈表與環的問題 3 判斷單鏈表是否有環 6形狀 4 如何找到環的入口?5 如何知道環的長度?6 帶環...

Mysql常見面試題

參考博文 innodb引擎中的索引型別 聚集索引 每張表都會他們的主鍵建立一顆b 樹索引,並且在葉子節點上會存放對應主鍵的行記錄。輔助索引 非聚集索引 對非主鍵列建立的b 樹索引,葉子節點存放了索引值和書籤,這個書籤就是對應的主鍵值。那之後可以通過這個主鍵值找到對應的行記錄。聯合索引 對兩個或者兩個...