數據庫的常見面試題


1.事務四大特性

  • 原子性:要么執行,要么不執行,也就是不可再分,已經最小了。
  • 隔離性:所有操作全部執行完以前其它會話不能看到過程。
  • 一致性:事務前后,數據總額一致。
  • 持久性:一旦事務提交,對數據的改變就是永久的

2.數據庫隔離級別

  • 臟讀:事務B讀取事務A還沒有提交的數據
  • 不可重復讀:兩次事務讀的數據不一致
  • 幻讀:事務A修改了數據,事務B也修改了數據,這時在事務A看來,明明修改了數據,咋不一樣

3.MYSQL的兩種存儲引擎區別(事務、鎖級別等等),各自的適用場景
    引擎                    特性
  MYISAM              不支持外鍵,表鎖,插入數據時,鎖定整個表,查表總行數時,不需要全表掃描
  INNODB              支持外鍵,行鎖,查表總行數時,全表掃描


4.索引有B+索引和hash索引

    索引                    區別
    Hash              hash索引,等值查詢效率高,不能排序,不能進行范圍查詢
    B+               數據有序,范圍查詢


5.聚集索引和非聚集索引
     索引                  區別
    聚集索引            數據按索引順序存儲,中子結點存儲真實的物理數據
    非聚集索引            存儲指向真正數據行的指針


6.索引的優缺點,什么時候使用索引,什么時候不能使用索引

  • 索引最大的好處是提高查詢速度,
  • 缺點是更新數據時效率低,因為要同時更新索引
  • 對數據進行頻繁查詢進建立索引,如果要頻繁更改數據不建議使用索引。

 

7.InnoDB索引和MyISAM索引的區別

一是主索引的區別,InnoDB的數據文件本身就是索引文件。而MyISAM的索引和數據是分開的。
二是輔助索引的區別:InnoDB的輔助索引data域存儲相應記錄主

8.索引的底層實現(B+樹,為何不采用紅黑樹,B樹)重點

     樹                           區別
    紅黑樹               增加,刪除,紅黑樹會進行頻繁的調整,來保證紅黑樹的性質,浪費時間
    B樹也就是B-樹            B樹,查詢性能不穩定,查詢結果高度不致,每個結點保存指向真實數據的指針,相比B+樹每一層每屋存儲的元素更多,顯得更高一點。
    B+樹                 B+樹相比較於另外兩種樹,顯得更矮更寬,查詢層次更淺


9.B+樹的實現
一個m階的B+樹具有如下幾個特征
1.有k個子樹的中間節點包含有k個元素(B樹中是k-1個元素),每個元素不保存數據,只用來索引,所有數據都保存在葉子節點。
2.所有的葉子結點中包含了全部元素的信息,及指向含這些元素記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。
3.所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素

10.為什么使用B+Tree
索引查找過程中就要產生磁盤I/O消耗,主要看IO次數,和磁盤存取原理有關。
根據B-Tree的定義,可知檢索一次最多需要訪問h個節點。數據庫系統的設計者巧妙利用了磁盤預讀原理,
將一個節點的大小設為等於一個頁,這樣每個節點只需要一次I/O就可以完全載入
局部性原理與磁盤預讀

11.Sql的優化
1.sql盡量使用索引,而且查詢要走索引
2.對sql語句優化
子查詢變成left join
limit 分布優化,先利用ID定位,再分頁
or條件優化,多個or條件可以用union all對結果進行合並(union all結果可能重復)
不必要的排序
where代替having,having 檢索完所有記錄,才進行過濾
避免嵌套查詢
對多個字段進行等值查詢時,聯合索引

12.索引最左前綴問題
如果對三個字段建立聯合索引,如果第二個字段沒有使用索引,第三個字段也使用不到索引了

13.索引分類,索引失效條件
      索引類型              概念
      普通索引          最基本的索引,沒有任何限制
      唯一索引          與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。
      主鍵索引          它是一種特殊的唯一索引,不允許有空值。
      全文索引          針對較大的數據,生成全文索引很耗時好空間。
      組合索引          為了更多的提高mysql效率可建立組合索引,遵循”最左前綴“原則
失效條件
條件是or,如果還想讓or條件生效,給or每個字段加個索引
like查詢,以%開發
內部函數
對索引列進行計算
is null不會用,is not null 會用

14.數據庫的主從復制
     復制方式                操作
     異步復制            默認異步復制,容易造成主庫數據和從庫不一致,一個數據庫為Master,一個數據庫為slave,通過Binlog日志,slave兩個線程,一個線程去讀master binlog日志,寫到自                  己的中繼日志一個線程解析日志,執行sql,master啟動一個線程,給slave傳遞binlog日志
     同步復制            只有把master發送的binlog日志寫到slave的中繼日志,這時主庫,才返回操作完成的反饋,性能有一定降低
     並行操作            slave 多個線程去請求binlog日志


15.long_query怎么解決
設置參數,開啟慢日志功能,得到耗時超過一定時間的sql

16.varchar和char的使用場景
      類型            使用場景
      varchar         字符長度經常變的
      char          用字符長度固定的


17.數據庫連接池的作用
維護一定數量的連接,減少創建連接的時間
更快的響應時間
統一的管理

19.分庫分表,主從復制,讀寫分離
讀寫分離,讀從庫,寫主庫
spring配置兩個數據庫,通過AOP(面向切面編程),在寫或讀方法前面進行判斷得到動態切換數據源。

20.數據庫三范式
      級別        概念
      1NF        屬性不可分
      2NF        非主鍵屬性,完全依賴於主鍵屬性
      3NF        非主鍵屬性無傳遞依賴


21.關系型數據庫和非關系型數據庫區別
關系型數據庫
優點

  • 容易理解:二維表結構是非常貼近邏輯世界一個概念,關系模型相對網狀、層次等其他模型來說更容易理解;
  • 使用方便:通用的SQL語言使得操作關系型數據庫非常方便;
  • 易於維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大減低了數據冗余和數據不一致的概率;
  • 支持SQL,可用於復雜的查詢。
  • 支持事務


缺點

  • 為了維護一致性所付出的巨大代價就是其讀寫性能比較差;
  • 固定的表結構;
  • 不支持高並發讀寫需求;
  • 不支持海量數據的高效率讀寫


非關系型數據庫

  • 使用鍵值對存儲數據;
  • 分布式;

優點

  • 無需經過sql層的解析,讀寫性能很高
  • 基於鍵值對,數據沒有耦合性,容易擴展
  • 存儲數據的格式:nosql的存儲格式是key,value形式

缺點

  • 不提供sql支持


22.數據庫中join的inner join, outer join, cross join
1.以A,B兩張表為例
A left join B
選出A的所有記錄,B表中沒有的以null 代替
right join 同理

2.inner join
A,B的所有記錄都選出,沒有的記錄以null代替

3.cross join (笛卡爾積)
A中的每一條記錄和B中的每一條記錄生成一條記錄
例如A中有4條,B中有4條,cross join 就有16條記錄

23.有哪些鎖,select時怎么加排它鎖

        鎖              概念
      樂觀鎖          自己實現,通過版本號
      悲觀鎖          共享鎖,多個事務,只能讀不能寫,加 lock in share mode
      排它鎖          一個事務,只能寫,for update
      行鎖           作用於數據行
      表鎖           作於用表


24.死鎖怎么解決
找到進程號,kill 進程

25.最左匹配原則
最左匹配原則是針對索引的
舉例來說:兩個字段(name,age)建立聯合索引,如果where age=12這樣的話,是沒有利用到索引的,
這里我們可以簡單的理解為先是對name字段的值排序,然后對age的數據排序,如果直接查age的話,這時就沒有利用到索引了,
查詢條件where name=‘xxx’ and age=xx 這時的話,就利用到索引了,再來思考下where age=xx and name=’xxx‘ 這個sql會利用索引嗎,
按照正常的原則來講是不會利用到的,但是優化器會進行優化,把位置交換下。這個sql也能利用到索引了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM