<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          14 個(gè)必須掌握的數(shù)據(jù)庫面試問題

          共 2619字,需瀏覽 6分鐘

           ·

          2022-12-17 23:42

          本文總結(jié)了14個(gè)必須掌握的數(shù)據(jù)庫面試題,附答案,快看看是否對你有幫助!

          1 為什么使用數(shù)據(jù)索引能提高效率

          • 數(shù)據(jù)索引的存儲(chǔ)是 有序的

          • 在有序的情況下, 通過索引查詢一個(gè)數(shù)據(jù)是無需遍歷索引記錄的

          • 極端情況下,數(shù)據(jù)索引的查詢效率為二分法查詢效率,趨近于log2(N)

          2 B+樹索引和哈希索引的區(qū)別

          B+樹是一個(gè)平衡的多叉樹,從根節(jié)點(diǎn)到每個(gè)葉子節(jié)點(diǎn)的高度差值不超過1,而且同層級(jí)的節(jié)點(diǎn)間有指針相互鏈接,是有序的,如下圖:

          哈希索引就是采用一定的哈希算法,把鍵值換算成新的哈希值,檢索時(shí)不需要類似B+樹那樣從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)逐級(jí)查找,只需一次哈希算法即可,是無序的,如下圖所示:

          3 哈希索引的優(yōu)勢

          等值查詢,哈希索引具有絕對優(yōu)勢(前提是:沒有大量重復(fù)鍵值,如果大量重復(fù)鍵值時(shí),哈希索引的效率很低,因?yàn)榇嬖谒^的哈希碰撞問題。

          4 哈希索引不適用的場景

          • 不支持 范圍查詢

          • 不支持索引完成排序

          • 不支持聯(lián)合索引的最左前綴匹配規(guī)則

          5 什么是表分區(qū)?

          表分區(qū),是指根據(jù)一定規(guī)則,將數(shù)據(jù)庫中的一張表分解成多個(gè)更小的,容易管理的部分。從邏輯上看,只有一張表,但是底層卻是由多個(gè)物理分區(qū)組成

          6 表分區(qū)與分表的區(qū)別?

          分表:指的是通過一定規(guī)則, 將一張表分解成多 張不同的表。比如將用戶訂單記錄根據(jù)時(shí)間成多個(gè)表。

          分表與分區(qū)的區(qū)別在于:分區(qū)從邏輯上來講只有一張表 ,而分表則是將一張表分解成多張表。

          7 表分區(qū)有什么好處?

          • 存儲(chǔ)更多數(shù)據(jù)。分區(qū)表的數(shù)據(jù)可以分布在不同的物理設(shè)備上,從而高效地利用多個(gè)硬件設(shè)備。和單個(gè)磁盤或者文件系統(tǒng)相比,可以存儲(chǔ)更多數(shù)據(jù)

          • 優(yōu)化E詢。在where語句中包含分區(qū)條件時(shí),可以只掃描一個(gè)或多 個(gè)分區(qū)表來提高查詢效率;涉及sum和count語句時(shí),也可以在多個(gè)分區(qū)上并行處理,最后匯總結(jié)果。

          • 分區(qū)表更容易維護(hù)。例如:想批量刪除大量數(shù)據(jù)可以清除整個(gè)分區(qū)。

          • 避免某些特殊的瓶頸,例如InnoDB的單個(gè)索引的互斥訪問, ext3問價(jià)你系統(tǒng)的inode鎖競爭等。

          8 在MVCC并發(fā)控制中,讀操作可以分成兩類

          快照讀(snapshot read):讀取的是記錄的可見版本(有可能是歷史版本),不用加鎖(共享讀鎖s鎖也不加,所以不會(huì)阻塞其他事務(wù)的寫)

          當(dāng)前讀(currentread):讀取的是記錄的最新版本,并且,當(dāng)前讀返回的記錄,都會(huì)加上鎖,保證其他事務(wù)不會(huì)再并發(fā)修改這條記錄

          9 行級(jí)鎖定的優(yōu)點(diǎn)

          • 當(dāng)在許多線程中訪問不同的行時(shí)只存在少量鎖定沖突。

          • 回滾時(shí)只有少量的更改

          • 可以長時(shí)間鎖定單一的行。

          10 行級(jí)鎖定的缺點(diǎn)

          比頁級(jí)或表級(jí)鎖定占用更多的內(nèi)存。當(dāng)在表的大部分中使用時(shí),比頁級(jí)或表級(jí)鎖定速度慢,因?yàn)槟惚仨毇@取更多的鎖。如果你在大部分?jǐn)?shù)據(jù)上經(jīng)常進(jìn)行GROUP BY操作或者必須經(jīng)常掃描整個(gè)表,比其它鎖定明顯慢很多。用高級(jí)別鎖定,通過支持不同的類型鎖定,你也可以很容易地調(diào)節(jié)應(yīng)用程序,因?yàn)槠滏i成本小于行級(jí)鎖定。

          11 MySQL優(yōu)化

          • 開啟查詢緩存,優(yōu)化查詢

          • explain你的select查詢, 這可以幫你分析你的查詢語句或是表結(jié)構(gòu)的性能瓶頸。EXPLAIN的查詢結(jié)果還會(huì)告訴你你的索引 主鍵被如何利用的,你的數(shù)據(jù)表是如何被搜索和排序的

          • 當(dāng)只要一行數(shù)據(jù)時(shí)使用limit 1, MySQL數(shù)據(jù)庫引擎會(huì)在找到一條數(shù)據(jù)后停止搜索,而不是繼續(xù)往后查少下一條符合記錄的數(shù)據(jù)

          • 為搜索字段建索引

          • 使用ENUM而不是VARCHAR

          • Prepared StatementsPrepared Statements很像存儲(chǔ)過程,是一種運(yùn)行在后臺(tái)的SQL語句集合,我們可以從使用

          prepared statements獲得很多好處,無論是性能問題還是安全問題。

          Prepared Statements可以檢查一些你綁定好的變量,這樣可以保護(hù)你的程序不會(huì)受到“SQL注入式” 攻擊

          • 垂直分表

          • 選擇正確的存儲(chǔ)引擎

          12 key和index的區(qū)別

          key是數(shù)據(jù)庫的物理結(jié)構(gòu),它包含兩層意義和作用,一是約束(偏 重于約束和規(guī)范數(shù)據(jù)庫的結(jié)構(gòu)完整性) ,二是索引(輔助查詢 用的)。包括primary key, unique key, foreign key等

          index是數(shù)據(jù)庫的物理結(jié)構(gòu),它只是輔助查詢的,它創(chuàng)建時(shí)會(huì)在另外的表空間(mysql中的innodb表空間) 以-個(gè)類似目錄的結(jié) 構(gòu)存儲(chǔ)。索引要分類的話,分為前綴索引、全文本索引等;

          13 Mysql 中MyISAM和InnoDB的區(qū)別有哪些?

          • InnoDB支持事務(wù), MyISAM不支持

          • InnoDB支持外鍵,而MylSAM不支持。對一個(gè)包含外鍵的InnoDB表轉(zhuǎn)為MYISAM會(huì)失敗;

          • InnoDB是聚集索引,數(shù)據(jù)文件是和索引綁在一起,必須要有主鍵,通過主鍵索引效率高。

          • InnoDB不保存 表的具體行數(shù),執(zhí)行select count(*) from table時(shí)需要全表掃描。

          • Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高;

          14 數(shù)據(jù)庫表創(chuàng)建注意事項(xiàng)

          1、字段名及字段配制合理性

          • 剔除關(guān)系不密切的字段; 1字段命名要有規(guī)則及相對應(yīng)的含義(不要一部分英文,一部分拼音,還有類似a.b.c這樣不明含義的字段) ;

          • 字段命名盡量不要使用縮寫(大多數(shù)縮寫都不能明確字段含義) ;

          • 字段不要大小寫混用(想要具有可讀性,多個(gè)英文單詞可使用下劃線形式連接) ;

          • 字段名 不要使用保留字或者關(guān)鍵字;

          • 保持字段名和類型的一致性;

          • 慎重選擇數(shù)字類型; 給文本字段留足余量;

          2、系統(tǒng)特殊字段處理及建成后建議

          • 添加刪除標(biāo)記(例如操作人、刪除時(shí)間) ;

          • 建立版本機(jī)制;

          3、表結(jié)構(gòu)合理性配置

          • 多型字段的處理 ,就是表中是否存在字段能夠分解成更小獨(dú)立的幾部分(例如:人可以分為男人和女人) ;

          • 多值字段的處理,可以將表分為三張表,這樣使得檢索和排序更加有調(diào)理,且保證數(shù)據(jù)的完整性!

          4、其它建議

          • 對于大數(shù)據(jù)字段,獨(dú)立表進(jìn)行存儲(chǔ),以便影響性能(例如:簡介字段) ;

          • 使用varchar類 型代替char,因?yàn)関archar 會(huì)動(dòng)態(tài)分配長度,char指定長度是固定的; 給表創(chuàng)建主鍵,對于沒有主鍵的表,在查詢和索引定義上有一定的影響;

          • 避免表字段運(yùn)行為null,建議設(shè)置默認(rèn)值(例如: int類型設(shè)置默認(rèn)值為0) 在索引查詢上,效率立顯; 1建立索引,最好建立在唯-和非空的字段上,建立太多的索引對后期插入、更新都存在一定的影響(考慮實(shí)際情況來創(chuàng)建) ;

          來源:database.51cto.com/art/202010/628634.htm

          瀏覽 50
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费看无码人妻AⅤ片 | 欧美天天色 | 国产免费靠逼视频 | 97大香蕉网 | 成人做爰黄 片视频免费看 |