面試中經常是由淺及深順着一條線問下去 , 下面僅列出我遇到過的面試問題:
1.基礎三連問
關係型數據庫與非關係型數據庫有什麼區別?
MySQL有哪些存儲引擎?有什麼區別?
- InnoDB支持事務,MyISAM不支持
- 對於InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務;
- InnoDB支持外鍵,而MyISAM不支持。對一個包含外鍵的InnoDB錶轉爲MYISAM會失敗;
- InnoDB是聚集索引,數據文件是和索引綁在一起的,必須要有主鍵,通過主鍵索引效率很高。
- 但是輔助索引需要兩次查詢,先查詢到主鍵,然後再通過主鍵查詢到數據。因此主鍵不應該過大,因爲主鍵太大,其他索引也都會很大。
- 而MyISAM是非聚集索引,數據文件是分離的,索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。
- InnoDB不保存表的具體行數,執行select count(*) from table時需要全表掃描。而MyISAM用一個變量保存了整個表的行數,執行上述語句時只需要讀出該變量即可,速度很快;
- Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高
項目中數據庫表創建注意事項?
- 合理的字段類型 定義 char varchar int
- 字段定義爲not null
- SQL優化鍵索引
- .......
char varchar 區別?
索引的類型有哪些?
主鍵索引 普通索引 唯一索引 組合索引 全文索引
你是如何判斷索引生效的?
EXPLAIN 的查詢結果會告訴你你的索引主鍵被如何利用的,你的數據表是如何被搜索和排序的
Explain 結果中,一般來說,要看到儘量用 index(type 爲 const、 ref 等, key 列有值),避免使用全表掃描(type 顯式爲 ALL)。比如說有 where 條件且選擇性不錯的列,需要建立索引。
組合索引(聯合索引) 的索引生效原則?(重點)
最左優先原則
2. 進階連環問
索引爲什麼能加快查詢效率?
索引提高了查詢速度對增刪改有影響嗎?
索引常用的算法原理分析B樹和B+樹等
MySQL事物四大特徵?隔離級別?默認隔離級別?
https://www.jianshu.com/p/081a3e208e32
項目中用到數據庫鎖簡單介紹?
悲觀鎖 樂觀鎖
mysql主從複製原理?
1. 主:binlog線程——記錄下所有改變了數據庫數據的語句,放進master上的binlog中;
2. 從:io線程——在使用start slave 之後,負責從master上拉取 binlog 內容,放進 自己的relay log中;
3. 從:sql執行線程——執行relay log中的語句