針對面試-mysql篇

1.如何定位慢查詢?

????????1.1.介紹一下當時產生問題的場景(我們當時的接口測試的時候非常的慢,壓測的結果大概5秒鐘)),可以監測出哪個接口,最終因為是sql的問題

?????????1.2.我們系統中當時采用了運維工具(Skywalking就是2秒,一旦sql執行超過2秒就會記錄到日志中(調試階段)

? ? ? ? 1.3.在mysql中開啟了慢日志查詢,我們設置的值就是2秒,一旦sql執行超過2秒就會記錄到日志中(調試階段)

2. 這個SQL語句執行很慢,如何分析呢?

可以采用MySQL自帶的分析工具 EXPLAIN
????????2.1通過key和key len檢查是否命中了索引(索引本身存在是否有失效的情況)

????????2.2通過type字段查看sql是否有進一步的優化空間,是否存在全索引掃描或全盤掃描

????????2.3通過extra建議判斷,是否出現了回表的情況,如果出現了,可以嘗試添加索引或修改返回字段來修復

3.(什么是索引)了解過索引嗎?

????????索引(index)是幫助MySQL高效獲取數據的數據結構(有序)

????????它提高數據檢索的效率,降低數據庫的IO成本(不需要全表掃描)

????????通過索引列對數據進行排序,降低數據排序的成本,降低了CPU的消耗

4.索引的底層數據結構了解過嘛 ?

????????MySQL的InnoDB引擎采用的B+樹的數據結構來存儲索引
????????階數更多,路徑更短
????????磁盤讀寫代價B+樹更低,非葉子節點只存儲指針,葉子階段存儲數據B+樹便于掃庫和區間查詢,葉子節點是一個雙向鏈表

5.什么是聚簇索引什么是非聚簇索引?

????????聚簇索引(聚集索引):數據與索引放到一塊,B+樹的葉子節點保存了整行數據,有且只有一個

????????非聚簇索引(二級索引):數據與索引分開存儲,B+樹的葉子節點保存對應的主鍵,可以有多個

6.知道什么是回表查詢嘛 ?

????????通過二級索引找到對應的主鍵值,到聚集索引中查找整行數據,這個過程就是回表

7.知道什么叫覆蓋索引嘛 ?

????????覆蓋索引是指查詢使用了索引,返回的列,必須在索引中全部能夠找到

? ? ? ? 7.1 使用id查詢,直接走聚集索引查詢,一次索引掃描,直接返回數據,性能高。

? ? ? ?7.2??如果返回的列中沒有創建索引,有可能會觸發回表查詢,盡量避免使用select*

8.MYSQL超大分頁怎么處理?

????????問題:在數據量比較大時,limit分頁查詢,需要對數據進行排序,效率低

????????解決方案:覆蓋索引+子查詢

9.索引創建原則有哪些?

????????1).數據量較大,且查詢比較頻繁的表

????????2).常作為查詢條件、排序、分組的字段

????????3).字段內容區分度高

????????4).內容較長,使用前綴索引

????????5).盡量聯合索引

????????6).要控制索引的數量

????????7).如果索引列不能存儲NULL值,請在創建表時使用NOT NULL約束它

10.什么情況下索引會失效 ?

????????違反最左前綴法則
????????范圍查詢右邊的列,不能使用索引
????????不要在索引列上進行運算操作,索引將失效字符串不加單引號,造成索引失效。(類型轉換)
????????以%開頭的Like模糊查詢,索引失效

11.談談你對sql的優化的經驗

? ? ? ?11.1 表的設計優化(參考阿里開發手冊《嵩山版》)
????????????????① 比如設置合適的數值(tinyint int bigint),要根據實際情況選擇
????????????????② 比如設置合適的字符串類型(char和varchar)char定長效率高,varchar可變長度,效率稍低

? ? ? ?11.2 SQL語句優化
????????????????SELECT語句務必指明字段名稱(避免直接使用select*)

????????????????SQL語句要避免造成索引失效的寫法

????????????????盡量用union all代替union union會多一次過濾,效率低

????????????????避免在where子句中對字段進行表達式操作

????????????????Join優化 能用innerjoin 就不用left join right join,如必須使用 一定要以小表為驅動內連接會對兩個表進行優化,優先把小表放到外邊,把大表放到里邊。leftjoin 或 right join,不會重新調整順序

???????11.3·主從復制、讀寫分離
????????????????如果數據庫的使用場景讀的操作比較多的時候,為了避免寫的操作所造成的性能影響 可以采用讀寫分離的架構。讀寫分離解決的是,數據庫的寫入,影響了查詢的效率.

????????11.4. 索引優化,索引創建原則

????????11.5 分庫分表

12. 事務是什么

????????事務是一組操作的集合,它是一個不可分割的工作單位,事務會把所有的操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要么同時成功,要么同時失敗。

13.事務的ACID是什么?可以詳細說一下嗎?

原子性(Atomicity):事務是不可分割的最小操作單元,要么全部成功,要么全部失敗。
一致性(Consistency):事務完成時,必使所有的數據都保持一致狀態。
隔離性(lsolation):數據庫系統提供的機制,保證事務在不受外部并發操作影響的獨立環境下運行。持久性(Durability):事務一旦提交或回它對數據庫中的數據的改變就是永久的。

14.并發事務的問題有什么?

????????臟讀一個事務讀到另外一個事務還沒有提交的數據
????????不可重復讀一個事務先后讀取同一條記錄,但兩次讀取的數據不同,稱之為不可重復讀。
????????幻讀:一個事務按照條件查詢數據時,沒有對應的數據行,但是在插入數據時,又發現這行數據已經存在,好像出現了“幻影”

15.事務的隔離級別有哪些?

Read uncommitted 讀未提交:三種并發事務都不能解決
Read committed 讀已提交:能解決臟讀
Repeatable Read(默認) 可重復讀(mysql的默認隔離級別):能解決臟讀和不可重復讀
Serializable 串行化:三種并發事務都能解決

16.redo log

重做日志,記錄的是事務提交時數據頁的物理修改,redo log是用來實現事務的持久性

該日志文件由兩部分組成:重做日志緩沖(redologbuffer)以及重做日志文件(redolog file),前者是在內存中,后者在磁盤中。當事務提交之后會把所有修改信息都存到該日志文件中,用于在刷新臟頁到磁盤,發生錯誤時,進行數據恢復使用。

17. undo log

回滾日志,用于記錄數據被修改前的信息,作用包含兩個:提供回滾 和 MVCC(多版本并發控制)。undolog和redo loq記錄物理日志不一樣,它是邏輯日志
可以認為當delete一條記錄時,undolog中會記條對應的insert記錄,反之亦然
當update一條記錄時,它記錄一條對應相反的upate記錄。當執行rolback時,就可以從undolog中的邏輯記錄讀取到相應的內容并進行回滾。
undolog可以實現事務的一致性和原子性

18.undo log和redo log的區別

redo log:記錄的是數據頁的物理變化,服務宕機可用來同步數據

undo log:記錄的是邏輯日志,當事務回滾時,通過逆操作恢復原來的數據

redo log保證了事務的持久性,undolog保證了事務的原子性和一致性

19.解釋-下MVCC

全稱 Multi-Version Concurrency Control,多版本并發控制。指維護一個數據的多個版本,使得讀寫操作沒有沖突, MVCC的具體實現,主要依賴于數據庫記錄中的隱式字段、undolog日志、readView。

20.好的,事務中的隔離性是如何保證的呢?(你解釋一下MVCC)

MySQL中的多版本并發控制。指維護一個數據的多個版本,使得讀寫操作沒有沖突
20.1隱藏字段:
① trx id(事務id),記錄每一次操作的事務id,是自增的
② roll pointer(回滾指針),指向上一個版本的事務版本記錄地址

20.2 undo log:
① 回滾日志,存儲老版本數據
② 版本鏈:多個事務并行操作某一行記錄,記錄不同事務修改數據的版本,通過roll_pointer指針形成一個鏈表

20.3 readView解決的是一個事務查詢選擇版本的問題
根據readView的匹配規則和當前的一些事務id判斷該訪問那個版本的數據
不同的隔離級別快照讀是不一樣的,最終的訪問的結果不一樣

RC:每一次執行快照讀時生成ReadView
RR:僅在事務中第一次執行快照讀時生成ReadView,后續復用

21.mysql主從同步原理?

MySQL主從復制的核心就是二進制日志binlog(DDL(數據定義語言)語句和 DML(數據操縱語言)語句)

① 主庫在事務提交時,會把數據變更記錄在二進制日志文件 Binlog 中。
② 從庫讀取主庫的二進制日志文件 Binlog ,寫入到從庫的中繼日志 Relay Log 。
③ 從庫重做中繼日志中的事件,將改變反映它自己的數據

22.你們項目用過分庫分表嗎

業務介紹
1,根據自己簡歷上的項目,想一個數據量較大業務(請求數多或業務累積大)
2,達到了什么樣的量級(單表1000萬或超過20G)

具體拆分策略
1,水平分庫,將一個庫的數據拆分到多個庫中,解決海量數據存儲和高并發的問題(sharding-???????????????????????sphere、mycat)
2,水平分表,解決單表存儲和性能的問題(sharding-sphere、mycat)
3,垂直分庫,根據業務進行拆分,高并發下提高磁盤10和網絡連接數
4,垂直分表,冷熱數據分離,多表互不影響

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

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

相關文章

window 顯示驅動開發-報告圖形內存(三)

圖形內存報告示例 示例 1:筆記本電腦上的 128 MB 專用板載圖形內存 以下屏幕截圖顯示了使用 Intel Iris 離散圖形適配器運行 Windows 11 的 Surface 筆記本電腦的計算圖形內存數。 適配器的可用內存總數為 16424 MB,用于圖形用途,細分如下&…

極簡主義現代商務風格PPT模版6套一組分享下載

現代商務風格PPT模版下載https://pan.quark.cn/s/12fbc52124d9 第一張PPT模版,簡約風,橄欖綠背景,黑色豎條裝飾,文字有中英文標題和占位符。需要提取關鍵元素:簡約、橄欖綠、對稱布局、占位文本的位置。 風格?&#…

SpringBoot中10種動態修改配置的方法

在SpringBoot應用中,配置信息通常通過application.properties或application.yml文件靜態定義,應用啟動后這些配置就固定下來了。 但我們常常需要在不重啟應用的情況下動態修改配置,以實現灰度發布、A/B測試、動態調整線程池參數、切換功能開…

嵌入式自學第二十二天(5.15)

順序表和鏈表 優缺點 存儲方式: 順序表是一段連續的存儲單元 鏈表是邏輯結構連續物理結構(在內存中的表現形式)不連續 時間性能, 查找順序表O(1):下標直接查找 鏈表 O(n):從頭指針往后遍歷才能找到 插入和…

高并發內存池(三):TLS無鎖訪問以及Central Cache結構設計

目錄 前言: 一,thread cache線程局部存儲的實現 問題引入 概念說明 基本使用 thread cache TLS的實現 二,Central Cache整體的結構框架 大致結構 span結構 span結構的實現 三,Central Cache大致結構的實現 單例模式 thr…

Ubuntu 安裝 Docker(鏡像加速)完整教程

Docker 是一款開源的應用容器引擎,允許開發者打包應用及其依賴包到一個輕量級、可移植的容器中。本文將介紹在 Ubuntu 系統上安裝 Docker 的步驟。 1. 更新軟件源 首先,更新 Ubuntu 系統的軟件源: sudo apt update2. 安裝基本軟件 接下來…

【深度學習】數據集的劃分比例到底是選擇811還是712?

1 引入 在機器學習中,將數據集劃分為訓練集(Training Set)、驗證集(Validation Set)和測試集(Test Set)是非常標準的步驟。這三個集合各有其用途: 訓練集 (Training Set)&#xff…

Mysql刷題 day01

LC 197 上升的溫度 需求:編寫解決方案,找出與之前(昨天的)日期相比溫度更高的所有日期的 id 。 代碼: select w2.id from Weather as w1 join Weather as w2 on DateDiff(w2.recordDate , w1.recordDate) 1 where…

鴻蒙OSUniApp 制作個人信息編輯界面與頭像上傳功能#三方框架 #Uniapp

UniApp 制作個人信息編輯界面與頭像上傳功能 前言 最近在做一個社交類小程序時,遇到了需要實現用戶資料編輯和頭像上傳的需求。這個功能看似簡單,但要做好用戶體驗和兼容多端,還是有不少細節需要處理。經過一番摸索,總結出了一套…

科技的成就(六十八)

623、杰文斯悖論 杰文斯悖論是1865年經濟學家威廉斯坦利杰文斯提出的一悖論:當技術進步提高了效率,資源消耗不僅沒有減少,反而激增。例如,瓦特改良的蒸汽機讓煤炭燃燒更加高效,但結果卻是煤炭需求飆升。 624、代碼混…

榮耀手機,系統MagicOS 9.0 USB配置沒有音頻來源后無法被adb檢測到,無法真機調試的解決辦法

榮耀手機,系統MagicOS 9.0 USB配置沒有音頻來源后無法被adb檢測到,無法真機調試的解決辦法 前言環境說明操作方法 前言 一直在使用的uni-app真機運行榮耀手機方法,都是通過設置USB配置的音頻來源才能成功。突然,因為我的手機的系…

D-Pointer(Pimpl)設計模式(指向實現的指針)

Qt 的 D-Pointer(Pimpl)設計模式 1. Pimpl 模式簡介 Pimpl(Pointer to Implementation)是一種設計模式,用于將類的接口與實現分離,從而隱藏實現細節,降低編譯依賴,提高代碼的可維護…

MySQL 8.0 OCP 1Z0-908 101-110題

Q101.which two queries are examples of successful SQL injection attacks? A.SELECT id, name FROM backup_before WHERE name‘; DROP TABLE injection; --’; B. SELECT id, name FROM user WHERE id23 oR id32 OR 11; C. SELECT id, name FROM user WHERE user.id (SEL…

Vue ElementUI原生upload修改字體大小和區域寬度

Vue ElementUI原生upload修改字體大小和區域寬度 修改后 代碼 新增的修改樣式代碼 .upload-demo /deep/ .el-upload-dragger{width: 700px;height: 300px; }原有拖拽組件代碼 <!-- 拖拽上傳組件 --><el-uploadclass"upload-demo"dragaction"":m…

React和Vue在前端開發中, 通常選擇哪一個

React和Vue的選擇需結合具體需求&#xff1a; 選React的場景 大型企業級應用&#xff0c;需處理復雜狀態&#xff08;如電商、社交平臺&#xff09;團隊熟悉JavaScript&#xff0c;已有React技術棧積累需要高度靈活的架構&#xff08;React僅專注視圖層&#xff0c;可自由搭配…

Python爬蟲實戰:研究源碼還原技術,實現逆向解密

1. 引言 在網絡爬蟲技術實際應用中,目標網站常采用各種加密手段保護數據傳輸和業務邏輯。傳統逆向解密方法依賴人工分析和調試,效率低下且易出錯。隨著 Web 應用復雜度提升,特別是 JavaScript 混淆技術廣泛應用,傳統方法面臨更大挑戰。 本文提出基于源碼還原的逆向解密方法…

什么是alpaca 或 sharegpt 格式的數據集?

環境&#xff1a; LLaMA-Factory 問題描述&#xff1a; alpaca 或 sharegpt 格式的數據集&#xff1f; 解決方案&#xff1a; “Alpaca”和“ShareGPT”格式的數據集&#xff0c;是近年來在開源大語言模型微調和對話數據構建領域比較流行的兩種格式。它們主要用于訓練和微調…

OpenCV CUDA模塊中矩陣操作------矩陣元素求和

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 在OpenCV的CUDA模塊中&#xff0c;矩陣元素求和類函數主要用于計算矩陣元素的總和、絕對值之和以及平方和。這些操作對于圖像處理中的特征提取、…

給視頻加一個動畫。

為什么要給視頻加一個動畫&#xff1f; 很完整的視頻也就是從短動畫開始的。遮蓋住LOG用。 C:\Users\Sam\Desktop\desktop\startup\workpython\ocr Lottie.py import subprocessdef run_ffmpeg(cmd):print("Running:", " ".join(cmd))subprocess.run(cm…

15:00開始面試,15:06就出來了,問的問題有點變態。。。

從小廠出來&#xff0c;沒想到在另一家公司又寄了。 到這家公司開始上班&#xff0c;加班是每天必不可少的&#xff0c;看在錢給的比較多的份上&#xff0c;就不太計較了。沒想到4月一紙通知&#xff0c;所有人不準加班&#xff0c;加班費不僅沒有了&#xff0c;薪資還要降40%…