北京JAVA基礎面試30天打卡09

1.MySQL存儲引擎及區別

特性MyISAMMemoryInnoDB
B+ 樹索引? Yes? Yes? Yes
備份 / 按時間點恢復? Yes? Yes? Yes
集群數據庫支持? No? No? No
聚簇索引? No? No? Yes
壓縮數據? Yes? No? Yes
數據緩存? NoN/A? Yes
加密數據? Yes? Yes? Yes
外鍵支持? No? No? Yes
全文檢索? Yes? No? Yes
地理空間數據類型支持? Yes? No? Yes
地理空間索引支持? Yes? No? Yes
哈希索引? No? Yes? No
索引緩存? YesN/A? Yes
鎖的粒度TableTableRow
MVCC? No? No? Yes
復制支持? YesLimited? Yes
存儲限制256 TBRAM64 TB
T-tree 索引? No? No? No
事務? No? No? Yes
存儲引擎特點事務支持鎖粒度適用場景
InnoDBMySQL 8.0 默認引擎,支持 ACID 事務,行級鎖,支持外鍵,支持崩潰恢復?行鎖高并發 OLTP 系統
MyISAM不支持事務,只有表級鎖,讀取速度快,占用空間小,支持全文索引?表鎖以讀為主、日志、歸檔類系統
Memory數據存儲在內存中,速度極快,但數據易丟失(重啟清空),支持哈希索引?表鎖臨時表、緩存計算
CSV數據存儲為 CSV 文件,方便與外部程序交換數據,不支持索引?表鎖數據導入導出

2.Mysql的InnoDB引擎中的聚簇索引和非聚簇索引有什么區別?

聚簇索引的非葉子節點存儲的是索引值,葉子節點存儲的是完整的數據記錄,一個表只能有一個聚簇索引,一般是表的主鍵,主要用于范圍查詢和排序。非聚簇索引的非葉子節點存儲的也是索引值,但是葉子節點存儲的是數據行的主鍵和對應的索引列,一個表可以有多個非聚簇索引,非聚簇索引又稱為助索引,二級索引等,主要用于快速定位 要查找的列。

補充回答

聚簇索引簡單理解就是把索引和數據記錄放在一起了,通過索引就可以直接找到數據行了,而非聚簇索引,還需要通過回表找到相應的數據記錄。擴展回答 (引導思路及面試假想)

擴展回答

1:為什么聚簇索引查詢速度快?

在lnnoDB中,聚簇索引指的是按照每張表的主鍵構建的一種索引方式,它是將表數據按照主鍵的順序存儲在磁盤上的一種方式。這種索引方式保證了行的物理存儲順序與主鍵的邏輯順序相同,因此查找聚簇索引的速度非常快。

2:沒有創建主鍵怎么辦?

其實數據庫記錄中除了我們自己定義的字段外,還會添加一些隱藏字段,比如db_row_id,如果我們沒有創建主鍵,會默認選擇一個唯一索引作為聚簇索引,如果唯一索引也沒有,默認就選擇隱藏主鍵db_row_id作為聚簇索引l。

3:上面提到的回表是什么意思?

通常我們使用聚簇索就可以直接查找到數據記錄,但是非聚簇索引由于它的葉子節點只存儲主鍵值和索引值,這種情況下我們使用非聚簇索引查詢相應的數據記錄,需要先查到對應的葉子節點的主鍵值,然后再用主鍵值進行一次查詢才能獲得我們需要的數據記錄,這個過程稱為回表。

4:為什么主鍵查詢效率快?

從上面的回答可以看出,主鍵索引查詢數據記錄不需要回表,減少了查詢步驟,相應也提升的查詢效率。

5:我們應該如何提升查詢效率呢?

前面我們說到回表會降低查詢效率,所以我們應該通過優化索引結構,添加相應的索引以及優化sql語句,減少回表的次數以提升查詢的效率,同時我們也可以依賴覆蓋索引、索引下推等技術。

6:既然你提到了索引下推,和索引覆蓋,能否具體講一下?

索引覆蓋就是在索引中就包含了我們需要查詢的數據列,比如我想查詢column2,此時有一個索引記錄(columnl,column2),那我們通過索引columnl進行查詢 select column2 from table where column1='test’,上面的情況就是覆蓋索引的例子,這種情況就不需要回表進行查詢了。接下來講下索引下推,這個也很好理解,首先我們需要了解,存儲引擎只能根據索引例的值來定位到對應勺主鍵值,然后回表獲取完整的記錄行。如果查詢條中還有其他未在索引中使用的篩選條件,那么這些條件只能在回表獲取完整行之后在服務器層進行判斤。這就導致了很多不滿足條件的記錄也進行了回表桑作,增加了回表的次數。為了減少回表次數,我們可以利用索引下推技術在存儲引擎層使用索引中的列來進行額外的篩選操作,而不僅僅是使用索引來定位已錄的主鍵值。總結來說就是,索引下推就是聯合索在本身數據就有的情況下,直接通過聯合索引再進行一次數據的過濾,而不是通過回表返回到server層行數據的過濾。

3. MySQL 索引類型

數據結構分類:

  • B+Tree 索引(最常用,支持范圍查詢、排序)
  • Hash 索引(Memory 引擎支持,等值查詢快,不支持范圍查詢)
  • R-Tree 索引(空間索引,MyISAM 的 GIS 數據)
  • Fulltext 索引(全文搜索,MyISAM/InnoDB 支持)

功能分類:

  • 主鍵索引(Primary Key)
  • 唯一索引(Unique Key)
  • 普通索引(Index)
  • 全文索引(Fulltext)
  • 空間索引(Spatial)

物理存儲分類:

  • 聚簇索引(Clustered Index)
  • 非聚簇索引(Secondary Index / 非主鍵索引)
  • 覆蓋索引(Covering Index,索引包含查詢所需的所有列,無需回表)
  • 組合索引(Composite Index,多列聯合索引)
  • 前綴索引(Prefix Index,對字符串前 N 個字符建索引)

拓展:

1.InnoDB為什么使用B+樹實現索引?

1.B+樹是一棵平衡樹,每個葉子節點到根節點的路徑長度相同,查詢效率高

2.所有關鍵字都在葉子節點上,因此范圍查詢時只需要謠歷一遍葉子節點即可。

3.葉子節點都按照關鍵字的大小順序存放,因此可以快速的根據關鍵字大小進行排序。

4.非葉子節點不存儲實際數據,因此可以存儲更多的索引數據

5.非葉子節點適用指針鏈接葉子節點,因此可以快速的支持范國查詢和倒序查詢。

6.葉子節點之間通過 雙向鏈表鏈接,方便進行范國查詢。

所以可以總結得出,使用B+樹有以下有幾點,支持范圍查詢、支持排序、可以存儲更多的索引數據、因為葉子節點大小固定,節點分裂和合并時,IO操作少,同時因為大小固定,還有利于磁盤預讀,因為非葉子節點只存儲指向子節點的指針,而不存儲據,所以可以緩存更多的索引數據,有利于緩存。

2.B+樹索引l和Hash索引有什么區別?

1.因為B+樹索引將索引列的值按照大小排序存儲,所以更適合于范圍查詢,而哈希索引是基于Hash表的結構,所以哈希索引更適合等值查詢,但不適合范圍查詢和排序操作。

2.如果B+樹索引插入數據和刪除數據時需要調整索引結構,可能涉及到頁分裂和頁合并等操作(無序插入),維護成本較高,而哈希索引在插入和刪除數據只需要計算哈希值并插入或者刪除相應的記錄。

3.B+樹索引在磁盤上是有序存儲的,而哈希索引是無序存儲的

3.唯一索引和主鍵索引的區別?

兩者都具有唯一性,但是主鍵索引不能為null,唯一索引可以,主鍵索引每表只能有一個,唯一索引可以創建多個,在innoDB中,主鍵索引就是聚簇索引,但唯一索引通常是非聚簇索引(除了特殊情況,就是在沒有創建主鍵索引的情況下,MySQL會默認選擇一個唯一的非空索引I作為聚簇索引),同時主鍵索引一定不需要回表,但是唯一索引查詢通常是需要回表的,主鍵可以被其他表引用為外鍵,而唯一索引不可以。

4.MySQL如何保證唯一索引I的唯一性?

在支持事務的存儲引擎中(例如lnnoDB)中,事務機制和鎖定協議幫助維護索引的唯一性,當個事務正在修改索引引列時,其他事務對相同鍵值的修改會被適當的阻塞,直到第一個事務提交或回滾,確保了數據的一致性和唯一性,并且在實際的寫入數據到磁盤之前,MySQL也會執行約束檢查,確保不會違反唯一性約束。相應的因為唯一索引保證了指定列的值唯一,會讓唯一性索引查詢比非唯一性查詢根塊,因為能夠快速的匹配到唯一的記錄,但是也是因為要保證索引列的唯一性,因此在插入的時候需要檢查是否存在相同的索引值,會對插入性能產生一定的影響。

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

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

相關文章

AI時代的SD-WAN異地組網如何落地?

在全球化運營與數字化轉型浪潮下,企業分支機構、數據中心與云服務的跨地域互聯需求激增。傳統專線因成本高昂、部署緩慢、靈活性差等問題日益凸顯不足。SD-WAN以其智能化調度、顯著降本、敏捷部署和云網融合的核心優勢,成為實現高效、可靠、安全異地組網…

css中的color-mix()函數

color-mix() 是 CSS 顏色模塊(CSS Color Module Level 5)中引入的一個強大的顏色混合函數,用于在指定的顏色空間中混合兩種或多種顏色,生成新的顏色值。它解決了傳統顏色混合(如通過透明度疊加)在視覺一致性…

Github desktop介紹(GitHub官方推出的一款圖形化桌面工具,旨在簡化Git和GitHub的使用流程)

文章目錄**1. 簡化 Git 操作****2. 代碼版本控制****3. 團隊協作****4. 代碼托管與共享****5. 集成與擴展****6. 跨平臺支持****7. 適合的使用場景****總結**GitHub Desktop 是 GitHub 官方推出的一款圖形化桌面工具,旨在簡化 Git 和 GitHub 的使用流程,…

整數規劃-分支定界

內容來自:b站數學建模老哥 如:3.4,先找小于3的,再找大于4的 逐個

JetPack系列教程(六):Paging——讓分頁加載不再“禿”然

前言 在Android開發的世界里,分頁加載就像是一場永無止境的馬拉松,每次滾動到底部,都仿佛在提醒你:“嘿,朋友,還有更多數據等著你呢!”但別擔心,Google大佬們早就看透了我們的煩惱&a…

扎實基礎!深入理解Spring框架,解鎖Java開發新境界

大家好,今天想和大家聊聊Java開發路上繞不開的一個重要基石——Spring框架。很多朋友在接觸SpringBoot、SpringCloud這些現代化開發工具時,常常會感到吃力。究其原因,往往是對其底層的Spring核心機制理解不夠透徹。Spring是構建這些高效框架的…

Heterophily-aware Representation Learning on Heterogeneous Graphs

Heterophily-Aware Representation Learning on Heterogeneous Graphs (TPAMI 2025) 計算機科學 1區 I:18.6 top期刊 ?? 摘要 現實世界中的圖結構通常非常復雜,不僅具有全局結構上的異質性,還表現出局部鄰域內的強異質相似性(heterophily)。雖然越來越多的研究揭示了圖…

計算機視覺(7)-純視覺方案實現端到端軌跡規劃(思路梳理)

基于純視覺方案實現端到端軌跡規劃,需融合開源模型、自有數據及系統工程優化。以下提供一套從模型選型到部署落地的完整方案,結合前沿開源技術與工業實踐: 一、開源模型選型與組合策略 1. 感知-預測一體化模型 ViP3D(清華&#…

Nginx 屏蔽服務器名稱與版本信息(源碼級修改)

Nginx 屏蔽服務器名稱與版本信息(源碼級修改) 一、背景與目的 在生產環境部署 Nginx 時,默認配置會在 Server 響應頭中暴露服務類型(如 nginx)和版本號(如 nginx/1.25.4)。這些信息可能被攻擊者…

從鋼板內部應力視角,重新認識護欄板矯平機

一、為什么鋼板會“自帶波浪”? 鋼卷在熱軋后冷卻、卷取、長途運輸、多次吊運時,不同部位受到的溫度、張力、碰撞并不一致,內部會產生不均勻的殘余應力。應力大的區域想“伸長”,應力小的區域想“縮短”,宏觀上就表現為…

C++中的`auto`與`std::any`:功能、區別與選擇建議

引言 在C編程中,auto和std::any是兩個功能強大但用途不同的工具。理解它們的區別和適用場景對于編寫高效、可維護的代碼至關重要。本文將詳細介紹auto和std::any的基本概念、使用方法、適用場景以及它們之間的區別,并提供選擇建議,幫助開發者…

【Linux】進程(Process)

一、什么是進程二、進程的創建三、進程的狀態四、僵尸進程五、孤兒進程六、進程的優先級 以及 并發/并行七、進程的切換一、什么是進程?什么是進程呢(一)?官方話來說:進程是一個執行實例、正在執行的程序、是系統資源分配的基本單位按課本官方話可能有一…

銷售管理系統哪個好?14款軟件深度對比

本文將深入對比14款銷售管理系統:1.紛享銷客; 2.Zoho CRM; 3.神州云動 CRM; 4.勵銷云 CRM; 5.Microsoft Dynamics?365 CRM; 6.悟空 CRM; 7.泛微 CRM; 8.HubSpot CRM; 9.…

如何從 0 到 1 開發企業級 AI 應用:步驟、框架與技巧

本文來自作者 莫爾索 的 企業級 AI 應用開發與最佳實踐指南, 歡迎閱讀原文。 大家好,我之前出版的《LangChain 編程:從入門到實踐》一書獲得了良好的市場反響和讀者認可。近期推出了第二版,我對內容進行了大幅更新:近 …

【LLM】Openai之gpt-oss模型和GPT5模型

note gpt-oss模型代理能力:使用模型的原生功能進行函數調用、網頁瀏覽(https://github.com/openai/gpt-oss/tree/main?tabreadme-ov-file#browser)、Python 代碼執行(https://github.com/openai/gpt-oss/tree/main?tabreadme-o…

Ubuntu 20.04 虛擬機安裝完整教程:從 VMware 到 VMware Tools

目錄 一、VMware的安裝 1. 資源獲取 1. 網盤提取 2. VMware官網,選擇自己合適的版本,我下載的是16.2版本 2.安裝步驟 二、Ubuntu的安裝 1. Ubuntu 鏡像文件官網下載 2. Ubuntu的安裝步驟 第一步:打開剛剛安裝好的VMware16.2.0&#…

【DL】最優化理論和深度學習

最優化理論是計算機科學中一個重要的概念,它用于幫助我們找到最優解(即最小或最大值)的算法。在深度學習中,最優化理論用于幫助深度學習模型找到最優解。訓練誤差(Training Error):指模型在訓練…

商品分類拖拽排序設計

商品分類、菜單項以及其他需要排序的元素常常會用到拖拽排序功能。這個看似簡單的交互背后,其實涉及到一系列復雜的后端邏輯處理,尤其是在如何高效地更新數據庫記錄方面。本文將探討兩種常見的實現方案,并分析各自的優缺點,幫助你…

ROS機器人云實踐設計申報書-草稿

ROS機器人云實踐作品申報書 ROS機器人云實踐設計一、項目基本信息 項目名稱:基于ROS的移動機器人云實踐平臺設計與應用 申報單位:[具體單位名稱] 項目負責人:[具體參與人員] 申報日期:[填寫日期] 二、項目背景與目標 項目背景&…

Jira 根據問題類型 為 描述 字段添加默認值

背景: jira 8.16 想要為問題類型為 需求 的問題默認增加描述字段默認值 想都沒想直接根據之前添加缺陷類型時描述默認值的方式去添加(系統字段--描述--上下文和默認值--添加上下文), 結果不隨我愿, 系統默認的這個功能不能根據問題類型切換而切換不同的默認值, 只能設置 1 個…