面試題總結 資料庫問題

2021-09-12 02:31:33 字數 3132 閱讀 9135

1. mysql 索引使用的注意事項

資料庫索引

索引與主鍵的區別

2. ddl、dml、dcl分別指什麼

3. explain命令

顯示了mysql如何使用索引來處理select語句以及連線表,現實的資訊可以幫助選擇更好的索引和寫出更優化的查詢語句;

4. left join,right join,inner join

** 5. 資料庫事務acid**

6. 事物的隔離級別

髒讀在於只讀取了一次;

不可重複讀在於多次讀到別人不停修改的資料,導致結果不一致;

幻讀在於多次讀到別人不停增加修改記錄數,導致結果記錄數不一致;

7. 資料庫的幾大正規化

正規化的作用:可以避免資料冗餘,減少資料庫的查詢,減輕維護資料完整性的麻煩;減少列之間的依賴,不至於要修改乙個列而必須同時修改其他列。

8. 關於分庫分表問題

縱向垂直分表:把主鍵和一些列放在乙個表,然後把主鍵和另外的列放在另乙個表中;適用場景:乙個表中某些列常用,另一些列不常用;可以使資料行變小,乙個資料頁能儲存更多資料,查詢時減少io次數。

分表的缺點:有些分表策略基於應用層的邏輯演算法,一旦邏輯演算法改變,整個表邏輯都會改變,擴容性較差;

9. 分庫與分表帶來的分布式困境與應對之策

表關聯問題:隨著分庫分表的演變,聯合查詢就遇到跨庫跨表問題;

分頁與排序問題:

-方法: 需要在不同的分表中將資料進行排序返回,並將不同分表返回的結果集進行彙總和再排序,最後返回給使用者;

分布式事務問題

分布式全域性唯一id

10. 說說 sql 優化之道

11. mysql遇到的死鎖問題、如何排查與解決

解決12. 儲存引擎的 innodb與myisam區別,優缺點,使用場景

innodb與myisam區別

13. 索引類別(b+樹索引、全文索引、雜湊索引)、索引的原理

參考文章

14. 什麼是自適應雜湊索引(ahi)

雜湊是一種非常快速的查詢方法,在一般情況下這種查詢的時間複雜度為o(1),僅需要一次就能查詢到定位資料,innodb儲存會監控對錶上各索引頁的查詢,如果觀察到建立雜湊索引可以帶來速度提公升,則建立雜湊索引,稱為自適應雜湊索引,innodb儲存引擎會自動根據訪問的頻率和模式來自動地為某些熱點頁建立雜湊索引;

建立要求:

- 對這個頁的連續訪問模式必須是一樣的;

- 頁通過該模式訪問了n次,其中n滿足n=頁中記錄/16;

mysql中只有在memory引擎中支援雜湊索引;

15. 為什麼要用 b+tree作為mysql索引的資料結構

索引是存在於索引檔案中的,存在於磁碟中,因為索引通常很大,因此無法一次將全部索引載入到記憶體中,每次只能從磁碟中讀取乙個磁碟業的資料到記憶體中,而磁碟讀取的速度較記憶體中讀取的速度而言差了好幾個級別。

比較平衡二叉樹、b-tree和b+tree:

平衡二叉樹:其物理上是陣列,由於邏輯結構相近的節點在物理結構上可能會相差很遠,因此每次讀取的磁碟資料中有許多是用不上的,故而查詢過程中要進行多次磁碟讀取,非常耗時,所以不適合做索引結構;

b-tree:是為了充分利用磁碟預讀功能而建立的一種資料結構,可以說是為了作為索引才被發明出來的;b樹的每個節點可以儲存多個關鍵字,它將節點大小設定為磁碟頁的大小,充分利用了磁碟預讀的功能,每次讀取磁碟頁時就會讀取乙個整節點,更多的是在記憶體中對讀取進來的資料進行查詢;

b+tree:b+樹的主要原因是b樹在提高磁碟io效能的同時並沒有解決元素遍歷的效率低下問題,b+樹只要遍歷葉子節點就可以實現整棵樹的遍歷,而且在資料庫中基於範圍查詢是非常頻繁的,而b樹不支援這樣的操作;

16. 聚集索引與非聚集索引的區別

定義:-聚集索引:聚集索引中鍵值的邏輯順序決定了表中相應的物理儲存位置,因此乙個表中只能有乙個聚集索引,索引的邏輯順序與相應行的物理位置一致;模擬在查字典時根據拼音進行查詢;拼音的目錄和正文的目錄順序是一致的;

- 非聚集索引:邏輯順序與行的物理位置不一致,資料儲存在乙個地方,索引儲存在另乙個地方,索引帶有指標指向資料的儲存位置;模擬查字典時根據偏旁部首進行查詢;偏旁的目錄和正文儲存順序不一致;

聚集索引適用於:

- 包含大量非重複值的列;

- 進行非等值查詢時也就是範圍查詢時;

- 被連續訪問的列;

- 返回大型結果集的查詢;

- 經常被使用連線group by子句的查詢訪問的列;對group by或order by中指定的列進行索引,可以提高效能;

不適用於:

- 頻繁更改的列,將導致整行移動;

- 寬鍵;

聚集索引的葉節點就是最終的資料節點,非聚集索引的葉節點仍然是索引節點,但它有乙個指向最終資料的指標;

17. 遇到過索引失效的情況沒,什麼時候可能會出現,如何解決

查詢條件中帶有or的時候

如果列型別是字串,在條件中要將資料使用引號引用起來;

如果mysql估計使用全表掃瞄要比使用索引塊,則不使用索引;

存在null值條件;

not條件,資料庫更傾向於全表掃瞄;

like萬用字元,盡量不要使用字首匹配;

條件上包括函式,因為索引在建立時會和計算後可能不同。

資料型別轉換;

18.select for update語句

為了在查詢時,避免其他使用者以對錶進行插入,修改,或刪除等操作,造成表的不一致性。

什麼是關係型資料庫?

redis有哪些資料型別

redis發布/訂閱使用場景

資料庫面試題總結

總結一下常見的資料庫相關的面試題。資料庫分類問題 資料庫大小寫敏感問題 sql中like的用法 sql中regexp正規表示式的用法 正規表示式規則 在這裡,我認為通常資料庫的分類分為兩種 關係型資料庫和非關係型資料庫。1.like like可以和萬用字元 搭配,它包含的意思分別是任意個數的字元 任...

資料庫面試題總結

1 索引 檢視 儲存過程 事務 2 資料庫引擎 3 資料庫優化 4 資料庫遷移 災備 一 索引 索引型別 普通索引 唯一索引 聚合索引 非聚合索引 1 原理 2 優缺點 唯一索引保證表中資料唯 一 加快查詢速度 加強表之間的聯絡 額外占用物理空間 會根據資料庫表的curd而變動 3 使用場景 經常需...

面試題 資料庫

今天面試,遇到資料庫方面的問題,由於好久沒接觸過,很多都忘記了,回來查了資料,整理一下 1 觸發器與儲存過程的區別 觸發器 是一種特殊型別的儲存過程,當使用下面的一種或多種資料修改操作在指定表中對資料進行修改時,觸發器會生效 update insert 或 delete。觸發器可以查詢其它表,而且可...