




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)工業(yè)級(jí)液氨行業(yè)市場(chǎng)分析及投資價(jià)值評(píng)估前景預(yù)測(cè)報(bào)告
- 2025年中國(guó)個(gè)性化狗糧行業(yè)市場(chǎng)分析及投資價(jià)值評(píng)估前景預(yù)測(cè)報(bào)告
- 2025年新能源行業(yè)上市公司市值管理策略與新能源市場(chǎng)戰(zhàn)略布局報(bào)告
- 4.2.3 合理營(yíng)養(yǎng)與食品安全 說課稿人教版生物七年級(jí)下冊(cè)
- 新能源商用車輛在2025年市場(chǎng)需求與應(yīng)用場(chǎng)景下的新能源汽車綠色出行產(chǎn)業(yè)發(fā)展報(bào)告
- 新能源行業(yè)2025年協(xié)同創(chuàng)新風(fēng)電技術(shù)進(jìn)步報(bào)告
- 第十二課 感恩從父母開始教學(xué)設(shè)計(jì)初中心理健康七年級(jí)上冊(cè)浙教版(邊玉芳)
- 2025年中國(guó)高純級(jí)六氯乙硅烷行業(yè)市場(chǎng)分析及投資價(jià)值評(píng)估前景預(yù)測(cè)報(bào)告
- 2025年中國(guó)鋼琴線行業(yè)市場(chǎng)分析及投資價(jià)值評(píng)估前景預(yù)測(cè)報(bào)告
- 2025年中國(guó)感應(yīng)式自動(dòng)干手器行業(yè)市場(chǎng)分析及投資價(jià)值評(píng)估前景預(yù)測(cè)報(bào)告
- 1 《中國(guó)人民站起來了》課件高二上學(xué)期語文大單元教學(xué)同步備課課件(統(tǒng)編版選擇性必修上冊(cè))
- 2024-2030年中國(guó)橡塑密封件行業(yè)發(fā)展分析及發(fā)展趨勢(shì)預(yù)測(cè)與投資風(fēng)險(xiǎn)研究報(bào)告
- 閩2023-G-01先張法預(yù)應(yīng)力高強(qiáng)混凝土管樁DBJT13-95
- 安全事故應(yīng)急處置流程
- 玻璃纖維模壓成型工藝
- 新生兒嘔吐護(hù)理查房課件
- 高級(jí)茶藝師理論知識(shí)試題
- 【高中地理】中國(guó)的耕地資源與糧食安全+課件+地理人教版(2019)選擇性必修3
- APD自動(dòng)化腹膜透析機(jī)的使用
- 食品的生物保藏技術(shù)
- 中海油勞動(dòng)合同范本
評(píng)論
0/150
提交評(píng)論