數據庫常見面試題二


數據庫常見面試題二:

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+樹的實現,為什么使用B+tree

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

 

索引查找過程中就要產生磁盤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.索引分類,和失效的條件

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

 

14.varchar和char的使用場景

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

15.數據庫三范式

      1NF        屬性不可分
      2NF        非主鍵屬性,完全依賴於主鍵屬性
      3NF        非主鍵屬性無傳遞依賴


16.關系型數據庫和非關系型數據庫區別

關系型數據庫
優點

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


缺點

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


非關系型數據庫

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

優點

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

缺點

    • 不提供sql支持

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

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

排它鎖和共享鎖

  • 排它鎖(Exclusive),簡寫為 X 鎖,又稱寫鎖。
  • 共享鎖(Shared),簡寫為 S 鎖,又稱讀鎖。

有以下兩個規定:

  • 一個事務對數據對象 A 加了 X 鎖,就可以對 A 進行讀取和更新。加鎖期間其它事務不能對 A 加任何鎖。
  • 一個事務對數據對象 A 加了 S 鎖,可以對 A 進行讀取操作,但是不能進行更新操作。加鎖期間其它事務能對 A 加 S 鎖,但是不能加 X 鎖。

18.死鎖怎么解決

找到進程號,kill 進程


19.最左匹配原則

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

 

參考https://www.cnblogs.com/xiaofengwang/p/11246552.html


免責聲明!

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



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