數(shù)據(jù)庫(kù)面試題SQLSERVER和答案_第1頁(yè)
數(shù)據(jù)庫(kù)面試題SQLSERVER和答案_第2頁(yè)
數(shù)據(jù)庫(kù)面試題SQLSERVER和答案_第3頁(yè)
數(shù)據(jù)庫(kù)面試題SQLSERVER和答案_第4頁(yè)
數(shù)據(jù)庫(kù)面試題SQLSERVER和答案_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)庫(kù)面試題(SQLSERVER)和答案一、基礎(chǔ)概念與體系結(jié)構(gòu)1.簡(jiǎn)述SQLServer的邏輯體系結(jié)構(gòu)組成部分。SQLServer的邏輯體系結(jié)構(gòu)從宏觀到微觀可分為以下層級(jí):

-(1).數(shù)據(jù)庫(kù)(Database):SQLServer的核心容器,包含所有用戶數(shù)據(jù)、系統(tǒng)數(shù)據(jù)、元數(shù)據(jù)及對(duì)象(如表、視圖、存儲(chǔ)過程等)。

-(2).文件組(Filegroup):用于管理數(shù)據(jù)文件的邏輯集合,可將不同類型數(shù)據(jù)(如表數(shù)據(jù)、索引數(shù)據(jù))存儲(chǔ)到不同文件組,優(yōu)化I/O性能。

-(3).數(shù)據(jù)文件(.mdf/.ndf)與日志文件(.ldf):.mdf為主數(shù)據(jù)文件,存儲(chǔ)核心數(shù)據(jù);.ndf為輔助數(shù)據(jù)文件,擴(kuò)展存儲(chǔ);.ldf為事務(wù)日志文件,記錄所有事務(wù)操作以保證數(shù)據(jù)恢復(fù)。

-(4).頁(yè)(Page):數(shù)據(jù)存儲(chǔ)的最小物理單位(默認(rèn)8KB),包含行數(shù)據(jù)、索引條目或其他元數(shù)據(jù)。

-(5).區(qū)(Extent):由8個(gè)連續(xù)頁(yè)組成(64KB),是SQLServer分配空間的基本單位。2.SQLServer2019相較于2017版本的主要新特性有哪些?SQLServer2019針對(duì)大數(shù)據(jù)、安全性和跨平臺(tái)能力進(jìn)行了重點(diǎn)升級(jí):

-(1).大數(shù)據(jù)集成:新增PolyBase功能支持直接查詢Hadoop、AzureBlob存儲(chǔ)中的數(shù)據(jù),無需ETL;引入大數(shù)據(jù)池(BigDataPools),支持與Spark集成分析。

-(2).語言擴(kuò)展:支持Python、R、Java的用戶定義函數(shù)(UDF),并通過機(jī)器學(xué)習(xí)服務(wù)實(shí)現(xiàn)模型訓(xùn)練與推理。

-(3).安全增強(qiáng):動(dòng)態(tài)數(shù)據(jù)屏蔽(DDM)支持更細(xì)粒度的列級(jí)屏蔽策略;始終加密(AlwaysEncrypted)支持enclaves技術(shù),允許在加密數(shù)據(jù)上執(zhí)行計(jì)算。

-(4).跨平臺(tái)支持:正式推出Linux版本,支持Kubernetes容器化部署(通過Operator)。3.說明SQLServer中“主數(shù)據(jù)文件”與“事務(wù)日志文件”的核心作用及關(guān)聯(lián)關(guān)系。(1).主數(shù)據(jù)文件(.mdf):存儲(chǔ)數(shù)據(jù)庫(kù)的核心數(shù)據(jù)(如表、索引、視圖等對(duì)象)和元數(shù)據(jù)(如表結(jié)構(gòu)、約束定義),是數(shù)據(jù)庫(kù)啟動(dòng)時(shí)必須加載的文件。

(2).事務(wù)日志文件(.ldf):記錄所有事務(wù)操作的前像(Undo信息)和后像(Redo信息),用于實(shí)現(xiàn)事務(wù)的原子性(Atomicity)、持久性(Durability)及數(shù)據(jù)恢復(fù)(如崩潰恢復(fù)、日志備份還原)。

(3).關(guān)聯(lián)關(guān)系:事務(wù)日志是數(shù)據(jù)恢復(fù)的核心依據(jù),即使數(shù)據(jù)文件損壞,可通過日志文件將數(shù)據(jù)庫(kù)恢復(fù)到故障前的一致狀態(tài)(需結(jié)合完整備份)。二、SQL語法與查詢?cè)O(shè)計(jì)1.編寫SQL語句:查詢每個(gè)部門的最高工資,要求顯示部門ID、部門名稱和最高工資(表結(jié)構(gòu):部門表Dept(DeptID,DeptName),員工表Emp(EmpID,EmpName,DeptID,Salary))。SELECT

d.DeptID,

d.DeptName,

MAX(e.Salary)ASMaxSalary

FROM

Deptd

LEFTJOIN

EmpeONd.DeptID=e.DeptID

GROUPBY

d.DeptID,d.DeptName;關(guān)鍵點(diǎn):使用LEFTJOIN確保無員工的部門也能顯示(最高工資為NULL),通過GROUPBY按部門分組后取最大值。2.解釋INNERJOIN、LEFTJOIN、FULLOUTERJOIN的區(qū)別,并舉例說明適用場(chǎng)景。(1).INNERJOIN:僅返回兩表中滿足連接條件的匹配行。

示例:查詢“有員工的部門”,排除無員工的部門。

(2).LEFTJOIN:返回左表所有行,右表無匹配時(shí)以NULL填充。

示例:統(tǒng)計(jì)各部門員工數(shù)量(包括無員工的部門,數(shù)量為0)。

(3).FULLOUTERJOIN:返回左表和右表所有行,無匹配時(shí)以NULL填充。

示例:合并兩個(gè)系統(tǒng)的用戶數(shù)據(jù),保留所有記錄(即使一方無對(duì)應(yīng)數(shù)據(jù))。3.如何用SQL實(shí)現(xiàn)“查詢薪資高于所在部門平均薪資的員工”?(表結(jié)構(gòu):Emp(EmpID,DeptID,Salary))WITHDeptAvgAS(

SELECT

DeptID,

AVG(Salary)ASAvgSalary

FROMEmp

GROUPBYDeptID

)

SELECT

e.EmpID,

e.DeptID,

e.Salary

FROM

Empe

INNERJOIN

DeptAvgdaONe.DeptID=da.DeptID

WHERE

e.Salary>da.AvgSalary;思路:通過CTE(公共表表達(dá)式)計(jì)算各部門平均薪資,再與員工表關(guān)聯(lián)篩選。4.簡(jiǎn)述窗口函數(shù)(WindowFunction)與聚合函數(shù)的區(qū)別,并舉例說明窗口函數(shù)的典型應(yīng)用。(1).核心區(qū)別:聚合函數(shù)(如SUM、AVG)會(huì)將多行數(shù)據(jù)合并為一行,窗口函數(shù)則在不減少行數(shù)的前提下對(duì)數(shù)據(jù)分組計(jì)算(通過OVER子句定義窗口范圍)。

(2).典型應(yīng)用:計(jì)算“當(dāng)前行薪資與部門平均薪資的差值”(保留每行記錄);

按薪資排序并標(biāo)記“前10%高收入員工”(使用NTILE函數(shù));

分析“連續(xù)登錄天數(shù)”(使用LAG/LEAD函數(shù)獲取前后行數(shù)據(jù))。三、索引與查詢優(yōu)化1.聚集索引與非聚集索引的核心區(qū)別是什么?各自的適用場(chǎng)景有哪些?(1).核心區(qū)別:聚集索引:決定數(shù)據(jù)在磁盤上的物理存儲(chǔ)順序,一個(gè)表最多1個(gè)聚集索引;

非聚集索引:存儲(chǔ)索引鍵值和行定位器(如RID或聚集索引鍵),一個(gè)表可創(chuàng)建多個(gè)非聚集索引。

(2).適用場(chǎng)景:聚集索引:主鍵列(頻繁范圍查詢,如按日期排序的訂單表)、高基數(shù)列(如用戶ID);

非聚集索引:頻繁查詢的非主鍵列(如訂單表的“客戶ID”)、覆蓋查詢(索引包含所有查詢列,避免回表)。2.如何通過執(zhí)行計(jì)劃分析SQL查詢的性能問題?關(guān)鍵分析點(diǎn)有哪些?(1).獲取執(zhí)行計(jì)劃:在SSMS中執(zhí)行查詢時(shí)勾選“包括實(shí)際執(zhí)行計(jì)劃”(Ctrl+M),或使用SETSHOWPLAN_XMLON。

(2).關(guān)鍵分析點(diǎn):邏輯讀?。↙ogicalReads):反映查詢?cè)L問的頁(yè)數(shù),值越大性能越差;

操作符類型:掃描(Scan)vs查找(Seek)——掃描表示全表/索引遍歷,查找表示通過索引鍵定位;

并行度(DegreeofParallelism):過高的并行可能導(dǎo)致資源爭(zhēng)用,需結(jié)合服務(wù)器配置評(píng)估;

缺失索引建議:執(zhí)行計(jì)劃中若提示“MissingIndex”,需檢查是否因索引缺失導(dǎo)致全表掃描。3.簡(jiǎn)述索引碎片產(chǎn)生的原因及優(yōu)化方法。(1).產(chǎn)生原因:數(shù)據(jù)插入/刪除導(dǎo)致索引頁(yè)空間不連續(xù)(邏輯碎片);

索引鍵值頻繁更新導(dǎo)致頁(yè)分裂(物理碎片)。

(2).優(yōu)化方法:重建索引(REBUILD):適用于碎片率>30%(使用ALTERINDEX[IndexName]ON[Table]REBUILD),會(huì)重新分配頁(yè)并排序;

重組索引(REORGANIZE):適用于碎片率5%-30%(使用ALTERINDEX[IndexName]ON[Table]REORGANIZE),僅整理頁(yè)內(nèi)數(shù)據(jù),開銷更低;

定期維護(hù):通過作業(yè)調(diào)度(如每周)自動(dòng)檢查并優(yōu)化索引(可結(jié)合sys.dm_db_index_physical_stats動(dòng)態(tài)視圖)。四、事務(wù)與鎖機(jī)制1.解釋事務(wù)的ACID特性,并說明SQLServer如何實(shí)現(xiàn)這些特性。(1).原子性(Atomicity):事務(wù)的所有操作要么全部提交,要么全部回滾。SQLServer通過事務(wù)日志(Undo日志)記錄操作前狀態(tài),回滾時(shí)根據(jù)Undo日志恢復(fù)數(shù)據(jù)。

(2).一致性(Consistency):事務(wù)執(zhí)行后數(shù)據(jù)庫(kù)從一個(gè)一致狀態(tài)轉(zhuǎn)換到另一個(gè)一致狀態(tài)。通過約束(如主鍵、外鍵)、觸發(fā)器和應(yīng)用邏輯共同保證。

(3).隔離性(Isolation):多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)互不干擾。SQLServer通過鎖(共享鎖、排他鎖)和隔離級(jí)別(如READCOMMITTED、REPEATABLEREAD)控制可見性。

(4).持久性(Durability):事務(wù)提交后數(shù)據(jù)永久保存。通過事務(wù)日志(Redo日志)實(shí)現(xiàn),提交時(shí)日志已寫入磁盤(通過CHECKPOINT機(jī)制定期刷新數(shù)據(jù)頁(yè))。2.簡(jiǎn)述SQLServer中的鎖粒度級(jí)別及鎖升級(jí)(LockEscalation)的觸發(fā)條件。(1).鎖粒度級(jí)別(從細(xì)到粗):行鎖(Row)、鍵鎖(Key,用于索引)、頁(yè)鎖(Page)、區(qū)鎖(Extent)、表鎖(Table)、數(shù)據(jù)庫(kù)鎖(Database)。

(2).鎖升級(jí)觸發(fā)條件:當(dāng)一個(gè)事務(wù)持有超過5000個(gè)頁(yè)鎖或行鎖;

鎖內(nèi)存占用超過內(nèi)存閾值(默認(rèn)4MB);

手動(dòng)啟用鎖升級(jí)(通過ALTERTABLE[Table]SET(LOCK_ESCALATION=TABLE))。3.如何處理SQLServer中的死鎖?請(qǐng)列舉至少3種方法。(1).優(yōu)化事務(wù)設(shè)計(jì):縮短事務(wù)執(zhí)行時(shí)間,減少鎖持有時(shí)長(zhǎng);按相同順序訪問資源(如先更新表A再更新表B)。

(2).調(diào)整隔離級(jí)別:降低隔離級(jí)別(如從SERIALIZABLE改為READCOMMITTED),減少鎖競(jìng)爭(zhēng)。

(3).監(jiān)控與日志記錄:通過sys.dm_tran_locks動(dòng)態(tài)視圖監(jiān)控鎖狀態(tài),啟用跟蹤標(biāo)志1222(DBCCTRACEON(1222,-1))記錄死鎖日志。

(4).設(shè)置死鎖優(yōu)先級(jí):通過SETDEADLOCK_PRIORITYLOW降低當(dāng)前事務(wù)成為死鎖犧牲品的概率(默認(rèn)為NORMAL)。五、高可用與備份恢復(fù)1.對(duì)比SQLServer中數(shù)據(jù)庫(kù)鏡像(DatabaseMirroring)、日志傳送(LogShipping)和AlwaysOn可用性組(AlwaysOnAG)的優(yōu)缺點(diǎn)及適用場(chǎng)景。技術(shù)類型優(yōu)點(diǎn)缺點(diǎn)適用場(chǎng)景數(shù)據(jù)庫(kù)鏡像配置簡(jiǎn)單,支持同步/異步模式,自動(dòng)故障轉(zhuǎn)移(高安全模式)僅支持單輔助副本,不支持讀擴(kuò)展,2019版本已棄用舊版本環(huán)境的主備高可用日志傳送支持異地容災(zāi)(異步復(fù)制),輔助數(shù)據(jù)庫(kù)可讀(還原后)故障轉(zhuǎn)移需手動(dòng)干預(yù),延遲較高(取決于日志備份頻率)跨地域數(shù)據(jù)備份與容災(zāi)AlwaysOnAG支持多副本(最多8個(gè)),可讀輔助副本(可讀副本數(shù)可配置),自動(dòng)故障轉(zhuǎn)移配置復(fù)雜,需WindowsServer故障轉(zhuǎn)移群集(WSFC)支持生產(chǎn)環(huán)境高可用與讀寫分離2.設(shè)計(jì)一個(gè)完整的數(shù)據(jù)庫(kù)備份策略(假設(shè)業(yè)務(wù)RPO≤15分鐘,RTO≤1小時(shí))。(1).完整備份:每周日01:00執(zhí)行(BACKUPDATABASE[DB]TODISK='...'WITHCOMPRESSION),保留4周(覆蓋至少1個(gè)完整月的歷史)。

(2).差異備份:每日01:00執(zhí)行(BACKUPDATABASE[DB]TODISK='...'WITHDIFFERENTIAL),保留2天(配合完整備份快速恢復(fù))。

(3).事務(wù)日志備份:每15分鐘執(zhí)行(BACKUPLOG[DB]TODISK='...'WITHCOMPRESSION),保留24小時(shí)(滿足RPO≤15分鐘要求)。

(4).驗(yàn)證與存儲(chǔ):每次備份后執(zhí)行RESTOREVERIFYONLY驗(yàn)證完整性;備份文件存儲(chǔ)至本地磁盤+AzureBlob(跨地域容災(zāi))。3.如何通過日志備份將數(shù)據(jù)庫(kù)恢復(fù)到指定時(shí)間點(diǎn)?請(qǐng)寫出關(guān)鍵步驟。(1).還原最近一次完整備份(RESTOREDATABASE[DB]FROMDISK='...'WITHNORECOVERY);

(2).還原最新差異備份(若有,RESTOREDATABASE[DB]FROMDISK='...'WITHNORECOVERY);

(3).按時(shí)間順序還原事務(wù)日志備份,直至目標(biāo)時(shí)間點(diǎn)(RESTORELOG[DB]FROMDISK='...'WITHSTOPAT='2024-05-2014:30:00',NORECOVERY);

(4).最終恢復(fù)數(shù)據(jù)庫(kù)(RESTOREDATABASE[DB]WITHRECOVERY)。六、存儲(chǔ)過程與觸發(fā)器1.簡(jiǎn)述存儲(chǔ)過程的優(yōu)點(diǎn),并編寫一個(gè)帶輸出參數(shù)的存儲(chǔ)過程示例(功能:查詢指定部門的員工數(shù)量)。(1).優(yōu)點(diǎn):減少網(wǎng)絡(luò)流量(一次調(diào)用執(zhí)行多條SQL);

提高安全性(通過權(quán)限控制存儲(chǔ)過程訪問,隱藏表結(jié)構(gòu));

可重用性(封裝常用邏輯,避免重復(fù)開發(fā));

執(zhí)行計(jì)劃緩存(重復(fù)調(diào)用時(shí)直接使用緩存計(jì)劃,提升性能)。

(2).示例代碼:

CREATEPROCEDUREdbo.GetDeptEmpCount

@DeptIDINT,

@EmpCountINTOUTPUT

AS

BEGIN

SELECT@EmpCount=COUNT(EmpID)

FROMEmp

WHEREDeptID=@DeptID;

END;

--調(diào)用示例

DECLARE@CountINT;

EXECdbo.GetDeptEmpCount@DeptID=101,@EmpCount=@CountOUTPUT;

PRINT'部門101員工數(shù)量:'+CAST(@CountASVARCHAR);2.對(duì)比觸發(fā)器與存儲(chǔ)過程的區(qū)別,并說明AFTER觸發(fā)器與INSTEADOF觸發(fā)器的適用場(chǎng)景。(1).核心區(qū)別:觸發(fā)器:自動(dòng)綁定到表/視圖,在INSERT/UPDATE/DELETE操作時(shí)觸發(fā)執(zhí)行;

存儲(chǔ)過程:需手動(dòng)調(diào)用,不依賴特定表操作。

(2).觸發(fā)器類型與場(chǎng)景:AFTER觸發(fā)器:在原始操作完成后執(zhí)行(如INSERT后記錄日志、UPDATE后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論