面試數據庫八股文十問十答第六期

面試數據庫八股文十問十答第六期

作者:程序員小白條,個人博客

相信看了本文后,對你的面試是有一定幫助的!關注專欄后就能收到持續更新!

?點贊?收藏?不迷路!?

1)來說說一條 SQL 語句的執行過程?

  1. 詞法分析(Lexical Analysis):將 SQL 語句分解為一個個 Token,例如關鍵字、標識符、操作符等。
  2. 語法分析(Syntax Analysis):驗證 SQL 語句的語法是否正確,并生成語法樹。
  3. 語義分析(Semantic Analysis):驗證 SQL 語句的語義是否正確,例如表、字段是否存在,權限是否足夠等。
  4. 查詢優化(Query Optimization):根據語義樹生成多個查詢執行計劃,并選擇最優的執行計劃。
  5. 執行計劃生成(Execution Plan Generation):將最優執行計劃轉換為實際的執行操作序列。
  6. 執行(Execution):執行生成的操作序列,從存儲引擎中讀取數據、進行計算、返回結果等。

2)MySQL 的存儲引擎有哪些?有什么區別?

MySQL 的常見存儲引擎包括:

  • InnoDB:默認的存儲引擎,支持事務、行級鎖、外鍵等特性,適合于高并發、大數據量的應用。
  • MyISAM:不支持事務和行級鎖,但具有較高的讀取性能和全文索引的支持,適用于讀密集型的應用。
  • MEMORY:將表存儲在內存中,讀寫速度快,但數據不持久化,適用于臨時表和緩存等場景。
  • Archive:壓縮存儲引擎,適合于大量歷史數據的存儲和查詢,但不支持索引和事務。

這些存儲引擎在功能特性、性能表現和適用場景上有所區別,選擇合適的存儲引擎可以提升數據庫的性能和可靠性。

3)MySQL 的索引有哪幾類?

MySQL 的索引主要分為以下幾類:

  • B-Tree 索引:最常見的索引類型,適用于等值查詢、范圍查詢和排序查詢。
  • 哈希索引:適用于等值查詢,不支持范圍查詢和排序查詢,查詢性能穩定但局限性較大。
  • 全文索引:用于全文搜索,適用于文本字段的模糊查詢。
  • 空間索引:用于地理空間數據的索引,支持空間數據的查詢和分析。

每種索引類型都有自己的適用場景和限制,合理選擇和使用索引可以提升數據庫的查詢性能和效率。

4)聚簇索引和非聚簇索引有什么區別?

  • 聚簇索引(Clustered Index):數據行的物理順序與索引的邏輯順序一致。在聚簇索引下,表的數據按照索引的順序存儲,因此一個表只能有一個聚簇索引。InnoDB 存儲引擎的主鍵索引就是一個典型的聚簇索引。
  • 非聚簇索引(Non-clustered Index):索引中保存的是指向數據行的指針,而不是數據行本身。在非聚簇索引下,數據行的物理存儲順序與索引的邏輯順序不一定一致。一個表可以有多個非聚簇索引,常見的非聚簇索引有普通索引和唯一索引。

5)什么是回表?

回表指的是當通過索引查詢獲取到了行的主鍵或聚簇索引,但是需要進一步到數據頁中查找其他的列數據時的操作。如果一個查詢不能完全通過索引滿足,需要通過主鍵或聚簇索引再去數據頁中查詢數據,這個過程就稱為回表。回表會增加額外的IO操作,影響查詢性能,因此在設計索引時需要考慮覆蓋索引等優化手段來避免回表操作。

6)什么是最左匹配原則?

最左匹配原則是指,在多列索引中,如果查詢條件涉及到了多個列,并且使用了聯合索引,那么查詢時只能使用索引中的最左邊連續的列。也就是說,如果查詢條件中使用了索引的前綴列,索引可以被用到;如果查詢條件中的列順序與索引定義的順序不一致,那么索引就無法被利用到。這個原則是基于 B-Tree 索引的特性而來,對于最左前綴匹配的查詢可以快速定位到索引的起始位置,而對于不符合最左匹配原則的查詢則需要進行全表掃描或回表操作,影響查詢性能。

7)什么叫覆蓋索引?

覆蓋索引是指一個查詢可以完全通過索引的數據就能滿足,不需要回表到數據頁中去查找其他列的值。當查詢所需的列都包含在索引中時,數據庫可以直接從索引中獲取數據,而不需要額外的回表操作,這樣的索引就稱為覆蓋索引。覆蓋索引可以提高查詢性能,減少IO操作,特別是對于涉及大量數據的查詢。

8)什么叫索引下推?

索引下推(Index Condition Pushdown,簡稱ICP)是 MySQL 5.6 版本引入的優化特性之一,指的是在使用索引進行查詢時,MySQL 可以在索引中對部分不滿足查詢條件的記錄進行過濾,減少回表的次數。具體來說,當查詢條件中包含索引的列和非索引的列時,MySQL 可以先利用索引定位到滿足索引條件的記錄,然后再對非索引列進行過濾,而不是將所有滿足索引條件的記錄都取出再進行過濾。

9)建索引需要注意什么?

在建立索引時,需要注意以下幾點:

  • 選擇合適的列:選擇經常用于查詢條件、連接條件和排序的列建立索引,避免對不常使用的列建立索引,以減少索引的維護開銷和存儲空間。
  • 避免過多索引:過多的索引不僅增加了存儲空間,還會增加查詢優化器的選擇成本,并且在數據更新時會增加額外的維護開銷,因此需要權衡索引的數量和性能提升之間的關系。
  • 使用覆蓋索引:盡量建立覆蓋索引,避免回表操作,提高查詢性能。
  • 注意索引順序:根據查詢的頻率和特點選擇合適的索引順序,利用最左匹配原則。
  • 定期維護索引:定期分析索引的使用情況,刪除不再使用的索引,優化查詢性能。

10)用了索引一定就有用嗎?如何排查?

并不是所有情況下使用了索引就一定能提高查詢性能,有時候索引可能會導致性能下降,主要有以下幾種情況:

  • 數據分布不均勻:如果索引列的數據分布不均勻,可能會導致某些查詢只能利用到少量的索引,而大部分數據仍需要進行全表掃描,此時索引的效果不明顯。
  • 索引失效:當查詢條件中使用了函數、類型轉換或者對列進行了計算時,索引可能會失效,導致無法使用索引優化查詢。
  • 索引選擇不當:選擇了不合適的索引,或者建立了過多的索引,都可能導致性能下降。

為了排查索引是否起作用,可以通過以下幾種方式進行:

  • 執行計劃分析:通過 explain 命令查看查詢的執行計劃,判斷是否使用了索引。
  • 性能測試:對比使用索引和不使用索引的查詢性能,觀察是否有明顯的性能提升。
  • 使用慢查詢日志:分析慢查詢日志,查找執行時間較長的查詢,判斷是否存在索引不當的情況。
  • 監控系統資源:通過監控系統資源的使用情況,如CPU、內存、磁盤IO等,判斷索引是否對系統資源造成了明顯的影響。

開源項目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端總計已經 1300+ Star,2W+ 訪問!

?點贊?收藏?不迷路!?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18255.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18255.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18255.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode題目238

除自身以外的數組的乘積 中等 給你一個整數數組 nums,返回 數組 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法&…

大數據技術Hbase列數據庫——topic1

目錄 搭建單機版Hbase驗證方法一驗證方法二 搭建單機版Hbase 驗證方法一 使用 jps 命令查看 HMaster 進程是否啟動 首先使用xftp 7上傳hbase-2.1.0安裝壓縮包到虛擬機進行解壓縮到某一地址,這里解壓縮到了上傳的路徑即/root/software/ tar -zxvf hbase-2.1.0-bi…

進程與線程學習

多線程 tthreading.Thread(targettask,arge(11,)) start()開始 join()等待 主線程在默認情況下會等待所有非守護線程(子線程)結束后才會結束程序。也就是說,如果主線程在結束前沒有調用所有…

2025第十屆美陳展

展位又遭瘋搶!2025第十屆美陳展釋放“無界之美” 美是全球通用的語言,人類對美的追求始終如一,大眾審美在經歷了時代的變遷后開始趨同,東方文明深處的美學經濟開始崛起。 在如今商業邁入存量階段,以品牌為突破口打造…

基于 vuestic-ui 實戰教程 - 登錄篇

1. 簡介 登錄做為一個系統的門面,也是阻擋外界的一道防線,那在vuestic-ui中如何做登錄功能呢。在這里就之間沿用初始版本的Login頁面,作為一個演示模板,后續需要改進的讀者可以在此篇文章的基礎上修改。 2. 登錄接口相關api 與 t…

python連接mysql,并整理(去哪兒網)頁面數據到表

##引入requests/pymysql模塊 本地安裝mysql數據庫,安裝圖形化工具navicat import requests from pymysql import Connect#創建客戶端連接信息 client Connect(host127.0.0.1,port3306,userroot,password, ) #創建游標 cursor client.cursor() cursor.execute(cre…

17- PHP 開發-個人博客項目TP 框架路由訪問安全寫法歷史漏 洞

常見的php框架:laravel和thinkphp和yii 這里以thinkphp為例 thinkphp目錄訪問設置 這里只找到了這個3.多的源代碼,沒找點5.的,湊合一下 鏈接:GitHub - top-think/thinkphp: ThinkPHP3.2 ——基于PHP5的簡單快速的面向對象的PHP…

HTML用法介紹

文章目錄 一、HTML概念和模版二、常用標簽及用法1.p標簽2.span標簽3.h標簽4.hr標簽5.img標簽6.a標簽7.input標簽8.table標簽 一、HTML概念和模版 HTML的全稱為超文本標記語言&#xff0c;它包括一系列標簽組成&#xff0c;模版及各部分注釋如下&#xff1a; <!--聲明文檔類…

ROS基礎學習-話題通信機制研究

研究ROS通信機制 研究ROS通信機制 0.前言1.話題通信1.1 理論模型1.2 話題通訊的基本操作1.2.1 C++1.2.2 Python中使用自己的虛擬環境包1.2.2.1 參考11.2.2.2 參考21.2.2.3 /usr/bin/env:“python”:沒有那個文件或目錄1.2.3 Python1.2.2.1 發布方1.2.2.2 訂閱方1.2.2.3 添加可執…

【八股系列】談談關于對webpack熱更新的原理?

文章目錄 1. 熱更新原理2. 熱更新配置 1. 熱更新原理 Webpack 的熱模塊替換&#xff08;Hot Module Replacement&#xff0c;HMR&#xff09;是一種在不完全刷新頁面的情況下更新應用代碼的技術&#xff0c;從而提高了開發效率。以下是 HMR 的核心原理&#xff1a; 步驟描述1…

tcpdump抓包,抓包導出.pcap文件用wireshark看

1、抓所有口的包 tcpdump -i any host 設備的ip2、抓特定口的包 tcpdump -i eth2 port 61182 -nne3、將抓到的包導出到pacb文件 tcpdump -i eth2 port 61182 -nne -s0 -w /tmp/61182.pcap -s0: Sets the snapshot length to capture the entire packet. The 0 means that tcpd…

《征服數據結構》目錄

我們知道要想學好算法&#xff0c;必須熟練掌握數據結構&#xff0c;數據結構常見的有 8 大類&#xff0c;分別是數組&#xff0c;鏈表&#xff0c;隊列&#xff0c;棧&#xff0c;散列表&#xff0c;樹&#xff0c;堆&#xff0c;圖。但如果細分的話就比較多了&#xff0c;比如…

go-zero 實戰(2)

go-zero 實戰&#xff08;1&#xff09; 中&#xff0c;使用了go-zero 創建了order 和 user 兩個微服務。而order作為grpc的客戶端&#xff0c;user 作為grpc的服務端&#xff0c;打通了 order 到 user的調用。接下來&#xff0c;我們在user中&#xff0c;加入mysql組件。確保數…

我說同事咋找工作命中率這么高,原來是學習了這些招式

最近有兩個同事離職了&#xff0c;其中一個還是專科&#xff0c;他倆一個是前端開發&#xff0c;一個是python開發&#xff0c;兩個人都接近35歲了。我們還勸告他們&#xff0c;不要離職&#xff0c;要騎驢找馬。但了解后&#xff0c;他倆非常有信心的說&#xff1a;不怕&#…

富格林:遵守可信準則安全交易

富格林指出&#xff0c;當下的金融市場&#xff0c;投資者大多都會更傾向于盈利效率高的理財產品&#xff0c;而近年來興起的現貨黃金&#xff0c;正合投資者的心意。不過&#xff0c;投資現貨黃金若是不遵循其中的可信準則&#xff0c;是難以實現安全盈利的。那么有哪些可信準…

3D視覺技術|螺栓分揀測試

隨著制造業自動化程度的不斷提高&#xff0c;某大型汽配企業為提升生產效率、減少人力成本&#xff0c;提出了使用復合機器人完成螺栓分揀的需求。富唯智能通過采用復合機器人&#xff0c;結合3D工業相機和高性能控制器&#xff0c;實現螺栓的自動抓取&#xff0c;從而提升生產…

鴻蒙OS開發:【一次開發,多端部署】(一多天氣)項目

一多天氣 介紹 本示例展示一個天氣應用界面&#xff0c;包括首頁、城市管理、添加城市、更新時間彈窗&#xff0c;體現一次開發&#xff0c;多端部署的能力。 1.本示例參考一次開發&#xff0c;多端部署的指導&#xff0c;主要使用響應式布局的柵格斷點系統實現在不同尺寸窗…

【Qt 學習筆記】Qt窗口 | 工具欄 | QToolBar的使用及說明

博客主頁&#xff1a;Duck Bro 博客主頁系列專欄&#xff1a;Qt 專欄關注博主&#xff0c;后期持續更新系列文章如果有錯誤感謝請大家批評指出&#xff0c;及時修改感謝大家點贊&#x1f44d;收藏?評論? Qt窗口 | 工具欄 | QToolBar的使用及說明 文章編號&#xff1a;Qt 學習…

怎么看智慧城市的發展?

智慧城市&#xff0c;就像一個擁有高度智慧和感知能力的未來城市居民&#xff0c;正在不斷地學習、適應和進化。它通過無數的眼睛&#xff08;傳感器&#xff09;和耳朵&#xff08;數據收集設備&#xff09;來觀察和傾聽城市的脈動&#xff0c;通過強大的大腦&#xff08;數據…

opencv文檔py_contours示例整理

文章目錄 目錄說明contours_begin目標什么是輪廓?如何畫等高線?輪廓逼近法contour_features目標1.Moments 時刻2. Contour Area 輪廓面積3. Contour Perimeter 輪廓周長4. Contour Approximation 輪廓近似5. Convex Hull 凸包6. Checking Convexity 檢查凸性7. Bounding Rect…