MySQL數據庫核心面試題

數據庫中的引擎

常用的引擎有InnoDB、MyIsam、Memory三種。

MyIsam:組織形式分為三種:

frm文件存儲表結構、MyData文件存儲表中的數據、MyIndex文件存儲表的索引數據。是分開存儲的。

Memory:基于內存的,訪問速度快,但是后面可能用的都是Redis。

重點來說說InnoDB存儲引擎吧:

MySQL默認的存儲引擎,DML操作支持事務。一個ibd文件對應一張表嘛。它在一個TableSpace的表空間這樣一個邏輯結構中,按大小分為段、區、頁這樣的。一個段有四個區,一個區有連續64隔數據頁,這個數據頁就是InnoDB下最基本的數據單位嘛,然后數據頁的大小是16K,數據頁里面才是你存的這種行記錄,它都是往數據頁里面放的。

InnoDB有三個特點嘛:支持外鍵、還有事務、還有行級鎖,這是它的幾個特點。

它也是一個組織索引表,這一塊就跟索引掛鉤了嘛,它每個節點就是一個數據頁。然后根據組織形式又能分為聚集索引和二級索引嘛,根據不同的這種索引,字段進行組織,排放。

它不僅存放表結構、數據。還會存放該表對應的索引信息。

索引

一種用于提高數據庫查詢性能的有序的數據結構。通過它呢,數據庫引擎可以快速定位到存儲表中的特定數據,而不必逐行遍歷整個表。

聚集索引和二級索引

在InnoDB存儲引擎中,根據索引的存儲形式,分為聚集索引(指針)和二級索引(二級指針)

索引結構中,葉子結點存放的是整行的行數據。必須有,且只有一個。

索引結構中,葉子結點存放的是對應的主鍵。可以有多個。除了聚集索引以外的索引都是二級索引

B+樹和B樹的結點:

B+樹非葉子節點只存儲key,不存儲值,直到葉子節點才存儲值,非葉子節點主要起到索引作用,葉子節點包含了所有插入的元素。

B樹每個結點即存值又存key,我們知道,一個數據頁大小是16K固定的嘛,如果又存節點又存Key,就會導致每個節點存儲的key的個數少,進而導致樹的層數很深。這也是不用B樹去存儲索引的原因。

不用Hash存儲索引的原因:

不用Hash,因為我們數據庫查詢經常會涉及到范圍查詢嘛,而Hash索引只能做到精確查找,不能進行范圍查找,同時Hash不能對數據進行排序操作。

聚集索引選取規則

如果存在主鍵,主鍵就是聚集索引。

如果沒有設置主鍵,默認第一個唯一索引就是聚集索引。

如果又沒有主鍵,又沒有唯一索引,那么InnoDB會自動生成一個rowid作為隱藏的聚集索引。

對于葉子節點:聚集索引存放的是一行的全部信息,而二級索引存放的是主鍵值,通常會涉及到回表查詢嘛。(然后通過主鍵值,再回表)

回表查詢

先介紹一下聚集索引和二級索引的區別;

就是我們查詢條件一般是通過二級索引,這樣拿到了主鍵值,再拿到該主鍵值,再進行一次回表查詢。

覆蓋索引

查詢使用了索引,同時返回的列,不需要回表查詢,即一次查詢就能全部找到了。如select id,name from a where name = jack ,這里id是主鍵值,name是二級索引,通過二級索引查到了id,也就是主鍵值,不需要回表查詢,所以叫做覆蓋索引。因此盡量不要使用select *,因為這樣往往會做到回表查詢,影響查詢性能。

索引失效的場景

用到復合(聯合)索引的時候,違反最左前綴法則

【查詢的時候必須從索引的最左列開始,如果跳過了中間某一列,則跳過之后的索引都失效】
當查詢條件有范圍查詢的時候,其右邊的條件,如where id > 1 and xxx 【and后面的索引都會失效】

在索引列上進行運算操作

以%開頭的模糊查詢

隱式類型轉換(如表中數據是字符串類型,而你給他一個int類型,即不加單引號,索引會失效)

索引設計原則

①數據量大,且查詢比較頻繁的表建立索引,如果一個表全是增刪改的操作,就沒必要加索引了

②常作為查詢條件where、order by、group by操作的字段建立索引,如果一次查詢條件的字段為多個,也可以考慮設置聯合索引,但記住它們的順序不能改變,要遵守最左配對原則

③選擇區分度高的列作為索引,像性別男女就沒必要。

④如果是字符串類型的字段,且長度較長,可以針對字段的特點,建立前綴索引

盡量使用聯合索引,減少單列索引,查詢時,聯合索引很多時候可以覆蓋索引,避免回表,提高查詢效率。

⑥控制索引的數量,索引越多,維護索引結構的代價也越大,會影響增刪改的效率

事務

對于單獨的DQL(數據查詢語句)我們一般不會說去考慮事務,如果是設計到DDL、DML比如insert、update、delete,為了保證操作的原子性,即同時成功或同時失敗。因為事務是一個不可分割的單元嘛,并且如果有的成功執行,有的沒成功,那就會造成很大的問題,也因此引入了事務的機制。

四大特性:

原子性:保證一個事務中的多條操作語句,要不同時成功,要不同時失敗。不會處于中間狀態。

一致性:事務執行的結果是使數據庫從一個狀態變到另一個一致性狀態。

隔離性:涉及到不同的隔離機制,數據庫中有四種隔離機制,讀未提交、讀已提交、可重復讀、串行化。使得每個事務都獨立執行嘛。

持久性:因為數據最終是要落盤的,持久化保存數據嘛。

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

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

相關文章

C++11特性(二)

文章目錄 右值引用和移動語義左值引用和右值引用左值與左值引用右值與右值引用 右值引用有什么用完美轉發與萬能引用 右值引用和移動語義 左值引用和右值引用 所謂的引用就是給變量起別名,那么左值引用和右值引用的區別其實就在于左值和右值 左值與左值引用 左值…

算法_前綴和

DP34 【模板】前綴和 import java.util.Scanner;// 注意類名必須為 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的區別int n in.nextInt(),q in.ne…

JavaFX布局-HBox

JavaFX布局-HBox 常用屬性alignmentspacingchildrenmarginpaddinghgrow 實現方式Java實現Xml實現 綜合案例 HBox按照水平方向排列其子節點改變窗口大小,不會該部整體布局窗口太小會遮住內部元素,不會產生滾動條 常用屬性 alignment 對齊方式 new HBox().setAlign…

Angular前端項目在Apache httpd服務器上的部署

Apache Httpd和Tomcat主要區別:Tomcat是一個Java Servlet容器,用于運行Java Servlet和JavaServer Pages(JSP),而Apache HTTP服務器是一個通用的Web服務器,用于提供靜態和動態內容。 Apache httpd安裝&#…

RT Thread + CLion環境搭建

RT Thread CLion環境搭建 0.前言一、準備工具1. Env RT Thread v5.12.CLion安裝3.編譯及下載工具 二、新建Env工程三、CLion配置四、運行測試 0.前言 事情的起因是最近在使用RT Thread Studio時,發現默認的 rtt 內核版本及交叉編譯鏈版本都過于陳舊,于…

SpringBoot 表單提交參數綁定 List 下標越界,超過 256,報數組越界異常

文章目錄 》原因》解決方案 》原因 Spring Validation 的 org.springframework.validation.DataBinder 類中默認限制,表單提交 List 元素數量超過 256 時就會拋出異常 public class DataBinder implements PropertyEditorRegistry, TypeConverter {/** Default li…

JS算法-十大排序算法(上)

思想小劇場 如果我的相對論被證明是正確的,德國人就會說我是德國人,法國人會說我是一個世界公民;如果我的相對論被否定了,法國佬就會罵我是德國鬼子,而德國人就會把我歸為猶太人。—愛因斯坦 以下案例都是升序 const a…

《無畏契約》游戲畫面出現“撕裂感“,你清楚背后的原理嗎?

🌸個人主頁:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵?熱門專欄:🍕 Collection與數據結構 (91平均質量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …

信息化總體架構方法_2.信息化工程建設方法

1.信息化架構模式 信息化架構一般有兩種模式,一種是數據導向架構,一種是流程導向架構。對于數據導向架構重點是在數據中心,BI商業智能等建設中使用較多,關注數據模型和數據質量;對于流程導向架構,SOA本身就…

黑馬程序員鴻蒙HarmonyOS端云一體化開發【13-15】

前置知識:arkts 一套開發工具,一套語言,搞定客戶端和云端兩個的編寫。其中application就是客戶端,cloudProgram就是云端。 開發人員->全棧開發工程師,降低了開發成本,且提供了很多現成的云服務&#xf…

AI原生實踐:測試用例創作探索

測試用例作為質量保障的核心,影響著研發-測試-發布-上線的全過程,如單元測試用例、手工測試用例、接口自動化用例、UI 自動化用例等,但用例撰寫的高成本尤其是自動化用例,導致了用例的可持續積累、更新和迭代受到非常大制約。長久…

Python并發編程 05 鎖、同步條件、信號量、線程隊列、生產者消費者模型

文章目錄 一、基礎概念二、同步鎖三、線程死鎖和遞歸鎖四、同步條件(event)五、信號量六、線程隊列(queue)1、常用方法2、queue模塊的三種模式(1)FIFO隊列(2)LIFO隊列(3&…

【JS面試題】原型原型鏈

一、面試真題展示: 1. 如何準確判斷一個變量是不是數組? ① 使用instanceof進行判斷:a instanceof Array ② 使用Array.isArray()進行判斷:Array.isArray(a) 2. 手寫一個簡易的jQuery,考慮插件和擴展性? …

內網工具之LDP的使用

LDP 是微軟自帶的一款活動目錄信息查詢工具,在域控的 cmd 窗口執行 ldp 命令即可打開 LDP 工具。普通域成員主機默認是沒有 LDP 工具的,可以自行上傳ldp.exe 工具上去查詢活動目錄信息。不在域內的機器,也可以通過上傳 ldp.exe 工具上去執行。…

tomcat--目錄結構和文件組成

目錄結構 目錄說明bin服務啟動,停止等相關程序和文件conf配置文件lib庫目錄logs日志記錄webapps應用程序,應用部署目錄workjsp編譯后的結果文件,建議提前預熱訪問 /usr/local/apache-tomcat-8.5.100/work/Catalina/localhost/ROOT/org/apac…

c++string類型

概述 string類型是c的字符串類型&#xff0c;其繼承自basic_string類。使用string需要導入頭文件#include <string>,并且在命名空間std下。cstring是否是寫時復制? (像Qt的string一樣)? 經過自己的測試&#xff0c;推斷&#xff0c;c的方式不是寫時復制&#xff0c;其在…

PingCAP 戴濤:構建面向未來的金融核心系統

作者&#xff1a;戴濤 導讀 近日&#xff0c;平凱星辰解決方案技術部總經理戴濤在 2024 數據技術嘉年華活動中&#xff0c;做了主題為“構建面向未來的金融核心系統”的分享&#xff0c;本文為戴濤演講實錄的全文。 文章分析了中國金融行業的發展趨勢&#xff0c;并且基于這…

在 Mac OS 上使用 Homebrew 打造便捷的軟件安裝體驗:apt-get install 就是brew install:

標題&#xff1a;在 Mac OS 上使用 Homebrew 打造便捷的軟件安裝體驗 在 Mac OS 系統中&#xff0c;雖然不支持 apt-get install&#xff0c;但我們有幸擁有 Homebrew 這樣出色的包管理器。它為我們在 Mac 上安裝各種所需軟件提供了極大的便利。 一、安裝 Homebrew 要安裝 Home…

算法提高之加成序列

算法提高之加成序列 核心思想&#xff1a;迭代加深 dfs 從上往下逐漸增大depth 這樣下面沒有用的方案就不用遍歷了 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 110;int n;int path[N];//當前求哪個位置…

PDF編輯閱讀器PDF Expert for Mac v3.10.1中文激活版

PDF Expert for Mac是一款易于使用的 PDF 編輯器和注釋器&#xff0c;專為 Mac 設備設計。它允許用戶輕松查看、編輯、簽名、注釋和共享 PDF。該軟件使用戶能夠向他們的 PDF 添加文本、圖像、鏈接和形狀&#xff0c;突出顯示和標記文本&#xff0c;填寫表格以及簽署數字文檔。它…