主鍵是為了標識數(shù)據(jù)庫記錄唯一性,不允許記錄重復(fù),且鍵值不能為空,主鍵也是一個特殊索引。數(shù)據(jù)表中只允許有一個主鍵,但" />

嫒美直播免费版app下载-嫒美直播永久免费版下载-嫒美直播最新下载安装

當(dāng)前位置:首頁 > 資格考試 > 正文

數(shù)據(jù)庫的問題,

數(shù)據(jù)庫老師會問哪些問題?

1.MySQL 主鍵與索引的聯(lián)系與區(qū)別

主鍵是為了標識數(shù)據(jù)庫記錄唯一性,不允許記錄重復(fù),且鍵值不能為空,主鍵也是一個特殊索引。

數(shù)據(jù)表中只允許有一個主鍵,但是可以有多個索引。

使用主鍵會數(shù)據(jù)庫會自動創(chuàng)建主索引,也可以在非主鍵上創(chuàng)建索引,方便查詢效率。

索引可以提高查詢速度,它就相當(dāng)于字典的目錄,可以通過它很快查詢到想要的結(jié)果,而不需要進行全表掃描。

主鍵索引外索引的值可以為空。

主鍵也可以由多個字段組成,組成復(fù)合主鍵,同時主鍵肯定也是唯一索引。

唯一索引則表示該索引值唯一,可以由一個或幾個字段組成,一個表可以有多個唯一索引。

2.數(shù)據(jù)庫索引是怎么回事?用的啥數(shù)據(jù)結(jié)構(gòu) 為什么B+樹比B樹更合適

一個索引是存儲的表中一個特定列的值數(shù)據(jù)結(jié)構(gòu)(最常見的是B-Tree)。索引是在表的列上創(chuàng)建。所以,要記住的關(guān)鍵點是索引包含一個表中列的值,并且這些值存儲在一個數(shù)據(jù)結(jié)構(gòu)中。請記住記住這一點:索引是一種數(shù)據(jù)結(jié)構(gòu) 。

什么樣的數(shù)據(jù)結(jié)構(gòu)可以作為索引?

B-Tree 是最常用的用于索引的數(shù)據(jù)結(jié)構(gòu)。因為它們是時間復(fù)雜度低, 查找、刪除、插入操作都可以可以在對數(shù)時間內(nèi)完成。另外一個重要原因存儲在B-Tree中的數(shù)據(jù)是有序的。數(shù)據(jù)庫管理系統(tǒng)(RDBMS)通常決定索引應(yīng)該用哪些數(shù)據(jù)結(jié)構(gòu)。但是,在某些情況下,你在創(chuàng)建索引時可以指定索引要使用的數(shù)據(jù)結(jié)構(gòu)。

當(dāng)我們利用索引查詢的時候,不可能把整個索引全部加載到內(nèi)存,只能逐一加載每個磁盤頁,磁盤頁對應(yīng)索引樹的節(jié)點。那么Mysql衡量查詢效率的標準就是磁盤IO次數(shù)。如果我們利用二叉樹作為索引結(jié)構(gòu),那么磁盤的IO次數(shù)和索引樹的高度是相關(guān)的。

那么為了提高查詢效率,就需要減少磁盤IO數(shù)。為了減少磁盤IO的次數(shù),就需要盡量降低樹的高度,需要把原來“瘦高”的樹結(jié)構(gòu)變的“矮胖”,樹的每層的分叉越多越好,因此B樹正好符合我們的要求,這也是B-樹的特征之一。

B樹 B樹的節(jié)點為關(guān)鍵字和相應(yīng)的數(shù)據(jù)(索引等)

B+樹 B+樹是B樹的一個變形,非葉子節(jié)點只保存索引,不保存實際的數(shù)據(jù),數(shù)據(jù)都保存在葉子節(jié)點中,B+樹的葉子節(jié)點為鏈表,鏈表放數(shù)據(jù),非葉子節(jié)點是索引。

對比:

  • B樹和B+樹同樣適用于高度越低,查詢越快。

  • B樹查找節(jié)點,B+樹只需要查詢所有節(jié)點(索引),B樹查詢索引和數(shù)據(jù)。雖然可能第一個就找到,但在極端情況下,需要全查詢索引和數(shù)據(jù),不如B+樹穩(wěn)定。

  • B+樹和B樹比,B+樹的硬盤空間更少,io的讀寫代價更低。因為B+樹節(jié)點只有索引,占位更少。在查詢的情況下硬盤指針移動更低

  • 哈希表索引是怎么工作的?

    哈希表是另外一種你可能看到用作索引的數(shù)據(jù)結(jié)構(gòu)-這些索引通常被稱為哈希索引。使用哈希索引的原因是,在尋找值時哈希表效率極高。所以,如果使用哈希索引,對于比較字符串是否相等的查詢能夠極快的檢索出的值。例如之前我們討論過的這個查詢(SELECT * FROM Employee WHERE Employee_Name = ‘Jesus’) 就可以受益于創(chuàng)建在Employee_Name 列上的哈希索引。哈系索引的工作方式是將列的值作為索引的鍵值(key),和鍵值相對應(yīng)實際的值(value)是指向該表中相應(yīng)行的指針。因為哈希表基本上可以看作是關(guān)聯(lián)數(shù)組,一個典型的數(shù)據(jù)項就像“Jesus => 0x28939″,而0x28939是對內(nèi)存中表中包含Jesus這一行的引用。在哈系索引的中查詢一個像“Jesus”這樣的值,并得到對應(yīng)行的在內(nèi)存中的引用,明顯要比掃描全表獲得值為“Jesus”的行的方式快很多。

    哈希索引的缺點

    哈希表是無順的數(shù)據(jù)結(jié)構(gòu),對于很多類型的查詢語句哈希索引都無能為力。舉例來說,假如你想要找出所有小于40歲的員工。你怎么使用使用哈希索引進行查詢?這不可行,因為哈希表只適合查詢鍵值對-也就是說查詢相等的查詢(例:like “WHERE name = ‘Jesus’)。哈希表的鍵值映射也暗示其鍵的存儲是無序的。這就是為什么哈希索引通常不是數(shù)據(jù)庫索引的默認數(shù)據(jù)結(jié)構(gòu)-因為在作為索引的數(shù)據(jù)結(jié)構(gòu)時,其不像B-Tree那么靈活

    3.創(chuàng)建索引的注意事項

    索引可以提高數(shù)據(jù)的訪問速度,但同時也增加了插入、更新和刪除操作的處理時間,解決此問題就是分析應(yīng)用程序的業(yè)務(wù)處理、數(shù)據(jù)使用,為經(jīng)常被用作查詢條件、或者被要求排序的字段建立索引。索引是建立在數(shù)據(jù)庫表中的某些列的上面。因此,在創(chuàng)建索引的時候,應(yīng)該仔細考慮在哪些列上可以創(chuàng)建索引,在哪些列上不能創(chuàng)建索引。

    創(chuàng)建規(guī)則:

  • 表的主鍵、外鍵必須有索引;

  • 數(shù)據(jù)量超過300的表應(yīng)該有索引;

  • 經(jīng)常與其他表進行連接的表,在連接字段上應(yīng)該建立索引;

  • 經(jīng)常出現(xiàn)在Where子句中的字段,特別是大表的字段,應(yīng)該建立索引;

  • 索引應(yīng)該建在選擇性高的字段上;

  • 索引應(yīng)該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;

  • 復(fù)合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替

  • 頻繁進行數(shù)據(jù)操作的表,不要建立太多的索引;

  • 刪除無用的索引,避免對執(zhí)行計劃造成負面影響;

  • 創(chuàng)建索引需要注意的地方:

  • 限制表上的索引數(shù)目。對一個存在大量更新操作的表,所建索引的數(shù)目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響數(shù)據(jù)的更新操作。

  • 避免在取值朝一個方向增長的字段(例如:日期類型的字段)上,建立索引;對復(fù)合索引,避免將這種類型的字段放置在最前面

  • 對復(fù)合索引,按照字段在查詢條件中出現(xiàn)的頻度建立索引

  • 刪除不再使用,或者很少被使用的索引。

  • 4.MYSQL事務(wù)特性和實現(xiàn)原理

    ACID表示原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)。一個很好的事務(wù)處理系統(tǒng),必須具備這些標準特性:

    原子性(atomicity)

    一個事務(wù)必須被視為一個不可分割的最小工作單元,整個事務(wù)中的所有操作要么全部提交成功,要么全部失敗回滾,對于一個事務(wù)來說,不可能只執(zhí)行其中的一部分操作,這就是事務(wù)的原子性

    是利用Innodb的undo log。undo log名為回滾日志,是實現(xiàn)原子性的關(guān)鍵,當(dāng)事務(wù)回滾時能夠撤銷所有已經(jīng)成功執(zhí)行的sql語句,他需要記錄你要回滾的相應(yīng)日志信息。

    一致性(consistency)

    數(shù)據(jù)庫總是從一個一致性的狀態(tài)轉(zhuǎn)換到另一個一致性的狀態(tài)。(在前面的例子中,一致性確保了,即使在執(zhí)行第三、四條語句之間時系統(tǒng)崩潰,支票賬戶中也不會損失200美元,因為事務(wù)最終沒有提交,所以事務(wù)中所做的修改也不會保存到數(shù)據(jù)庫中。)

    數(shù)據(jù)庫通過原子性、隔離性、持久性來保證一致性

    隔離性(isolation)

    通常來說,一個事務(wù)所做的修改在最終提交以前,對其他事務(wù)是不可見的。(在前面的例子中,當(dāng)執(zhí)行完第三條語句、第四條語句還未開始時,此時有另外的一個賬戶匯總程序開始運行,則其看到支票帳戶的余額并沒有被減去200美元。)

    利用的是鎖和MVCC機制。MVCC,即多版本并發(fā)控制(Multi Version Concurrency Control),一個行記錄數(shù)據(jù)有多個版本對快照數(shù)據(jù),這些快照數(shù)據(jù)在undo log中。如果一個事務(wù)讀取的行正在做DELELE或者UPDATE操作,讀取操作不會等行上的鎖釋放,而是讀取該行的快照版本。

    持久性(durability)

    一旦事務(wù)提交,則其所做的修改會永久保存到數(shù)據(jù)庫。(此時即使系統(tǒng)崩潰,修改的數(shù)據(jù)也不會丟失。持久性是個有占模糊的概念,因為實際上持久性也分很多不同的級別。有些持久性策略能夠提供非常強的安全保障,而有些則未必,而且不可能有能做到100%的持久性保證的策略。)

    是利用Innodb的redo log。當(dāng)做數(shù)據(jù)修改的時候,不僅在內(nèi)存中操作,還會在redo log中記錄這次操作。當(dāng)事務(wù)提交的時候,會將redo log日志進行刷盤(redo log一部分在內(nèi)存中,一部分在磁盤上)。當(dāng)數(shù)據(jù)庫宕機重啟的時候,會將redo log中的內(nèi)容恢復(fù)到數(shù)據(jù)庫中,再根據(jù)undo log和binlog內(nèi)容決定回滾數(shù)據(jù)還是提交數(shù)據(jù)。redo log體積小,刷盤快。redo log是一直往末尾進行追加,屬于順序IO。效率顯然比隨機IO來的快

    5.redis的原理和優(yōu)點

    redis是一個key-value存儲系統(tǒng).和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希類型)

    這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的.

    在此基礎(chǔ)上,redis支持各種不同方式的排序.與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中.區(qū)別的是redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實現(xiàn)了master-slave(主從)同步.

    Redis的優(yōu)點:

  • 性能極高 – Redis能支持超過 100K+ 每秒的讀寫頻率。

  • 豐富的數(shù)據(jù)類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。

  • 原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全并后的原子性執(zhí)行。

  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

  • 6.Mysql中的鎖機制

    Mysql用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。這些鎖統(tǒng)稱為悲觀鎖

    MySQL的鎖機制比較簡單,其最 顯著的特點是不同的存儲引擎支持不同的鎖機制。比如,MyISAM和MEMORY存儲引擎采用的是表級鎖(table-level locking);BDB存儲引擎采用的是頁面鎖(page-level locking),但也支持表級鎖;InnoDB存儲引擎既支持行級鎖(row-level locking),也支持表級鎖,但默認情況下是采用行級鎖。

  • 表級鎖:開銷小,加鎖快;不會出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低。

  • 行級鎖:開銷大,加鎖慢;會出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。

  • 頁面鎖:開銷和加鎖時間界于表鎖和行鎖之間;會出現(xiàn)死鎖;鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般

  • 從上述特點可見,很難籠統(tǒng)地說哪種鎖更好,只能就具體應(yīng)用的特點來說哪種鎖更合適!僅從鎖的角度 來說:表級鎖更適合于以查詢?yōu)橹?,只有少量按索引條件更新數(shù)據(jù)的應(yīng)用,如Web應(yīng)用;而行級鎖則更適合于有大量按索引條件并發(fā)更新少量不同數(shù)據(jù),同時又有 并發(fā)查詢的應(yīng)用,如一些在線事務(wù)處理(OLTP)系統(tǒng)。

    7.ABC聯(lián)合索引生效問題

    對于復(fù)合索引:Mysql從左到右的使用索引中的字段,一個查詢可以只使用索引中的一部份,但只能是最左側(cè)部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3種組合進行查找,但不支持 b,c進行查找 .當(dāng)最左側(cè)字段是常量引用時,索引就十分有效。

    對于復(fù)合索引:Mysql從左到右的使用索引中的字段,一個查詢可以只使用索引中的一部份,但只能是最左側(cè)部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3種組合進行查找,但不支持 b,c進行查找 .當(dāng)最左側(cè)字段是常量引用時,索引就十分有效。

關(guān)于數(shù)據(jù)庫的問題?

下列軟件不屬于數(shù)據(jù)庫管理系統(tǒng)的是(UNIX )。 UNIX ORACLE FOXPRO SQL SERVER DBS是采用了數(shù)據(jù)庫技術(shù)的計算機系統(tǒng)。DBS是一個集合體,包含數(shù)據(jù)庫、計算機硬件、軟件和(數(shù)據(jù)庫管理員) 。 系統(tǒng)分析員 程序員 數(shù)據(jù)庫管理員 操作員 對某個具體的數(shù)據(jù)庫應(yīng)用來說,下列說法中正確的是(以上三個都不是唯一的) 。 E-R 圖是唯一的 數(shù)據(jù)模型是唯一的 數(shù)據(jù)庫文件是唯一的 以上三個都不是唯一的 以下不屬于數(shù)據(jù)庫系統(tǒng)組成的是(文件系統(tǒng) )。 硬件系統(tǒng) 數(shù)據(jù)庫管理系統(tǒng)及相關(guān)軟件 數(shù)據(jù)庫管理員(DBA) 文件系統(tǒng) 下列四項中說法不正確的是(數(shù)據(jù)庫避免了一切數(shù)據(jù)的重復(fù))。 數(shù)據(jù)庫減

數(shù)據(jù)庫面試常問問題有哪些?

1、什么是數(shù)據(jù)庫事務(wù)

數(shù)據(jù)庫事務(wù)是構(gòu)成單一邏輯工作單元的操作集合。數(shù)據(jù)庫事務(wù)可以包括一個或多個數(shù)據(jù)庫操作,但是這些操作構(gòu)成一個邏輯上的整體。

2、數(shù)據(jù)庫事務(wù)的四個特性(ACID)

A:原子性,事務(wù)中的所有操作作為一個整體不可分割,要么全部操作要么全部不操作。

C:一致性,事務(wù)的執(zhí)行結(jié)果必須使數(shù)據(jù)庫從一個一致性狀態(tài)轉(zhuǎn)為另一個一致性狀態(tài)。一致性狀態(tài):1.系統(tǒng)狀態(tài)滿足數(shù)據(jù)庫的完整性約束,2.系統(tǒng)的狀態(tài)反映數(shù)據(jù)庫所描述的現(xiàn)實世界的真實狀態(tài)。

I:隔離性:并發(fā)執(zhí)行的事務(wù)不會相互影響,其對數(shù)據(jù)庫的影響和他們串行執(zhí)行時一樣。

D:持久性:事務(wù)一旦提交,對數(shù)據(jù)庫的影響就是持久的。任何事務(wù)或系統(tǒng)故障都不會導(dǎo)致數(shù)據(jù)丟失。

3、什么是數(shù)據(jù)庫連接泄露

數(shù)據(jù)庫連接泄露指的是如果在某次使用或者某段程序中沒有正確地關(guān)閉Connection、Statement和ResultSet資源,那么每次執(zhí)行都會留下一些沒有關(guān)閉的連接,這些連接失去了引用而不能得到重新使用,因此就造成了數(shù)據(jù)庫連接的泄漏。數(shù)據(jù)庫連接的資源是寶貴而且是有限的,如果在某段使用頻率很高的代碼中出現(xiàn)這種泄漏,那么數(shù)據(jù)庫連接資源將被耗盡,影響系統(tǒng)的正常運轉(zhuǎn)。

4、聚集索引

數(shù)據(jù)行的物理順序與列值的順序相同,如果我們查詢id比較靠后的數(shù)據(jù),那么這行數(shù)據(jù)的地址在磁盤中的物理地址也會比較靠后。而且由于物理排列方式與聚集索引的順序相同,所以也就只能建立一個聚集索引了。

5、主鍵與外鍵

關(guān)系型數(shù)據(jù)庫中的一條記錄中有若干個屬性,若其中某一個屬性組(注意是組)能唯一標識一條記錄,該屬性組就可以成為一個主鍵。

外鍵用于與另一張表的關(guān)聯(lián)。是能確定另一張表記錄的字段,用于保持數(shù)據(jù)的一致性。比如,A表中的一個字段,是B表的主鍵,那他就可以是A表的外鍵。

當(dāng)數(shù)據(jù)庫出現(xiàn)問題怎么辦

數(shù)據(jù)庫出現(xiàn)問題,首要的是盡快備份數(shù)據(jù)庫,如果數(shù)據(jù)庫損壞的話,找出最近日期的數(shù)據(jù)備份。 確認有數(shù)據(jù)庫備份后,根據(jù)數(shù)據(jù)庫錯誤的提示,一步一步地解決的,如果不是數(shù)據(jù)庫損壞,問題解決都不是很大的,如果是數(shù)據(jù)庫損壞的話,麻煩可就大了,只能考慮利用以前的數(shù)據(jù)庫備份了的

數(shù)據(jù)庫的問題

第一個問題:學(xué)到程度,要看你具體做哪個方向,如果你選擇ORACLE,那么ORACLE有對應(yīng)的考試,如果能通過,在一線城市實習(xí)期8K以上沒問題。 第二個問題:目前數(shù)據(jù)庫方面最重要的就是要控制好并發(fā),隊列做好索引,避免死鎖,等等實際的問題。 第三個問題:數(shù)據(jù)庫開發(fā):從事軟件項目數(shù)據(jù)庫部分的開發(fā),如果這部分開發(fā)用好了,那么會提供給前方程序人員很多便利。數(shù)據(jù)庫管理:負責(zé)監(jiān)管,出現(xiàn)異常通知相關(guān)人員處理,自身也能處理一些簡單的問題,比如創(chuàng)建個角色權(quán)限,分配個角色權(quán)限,用軟件看看數(shù)據(jù)庫進程哪些語句占用很多資源等等。 第四個問題:數(shù)據(jù)庫開發(fā)涉及到軟件方面。 第五個問題:數(shù)據(jù)庫自學(xué)的話,你可以購買一些比較經(jīng)典的
展開全文閱讀