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

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

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

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

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

1)為什么不推薦多表Join?

多表 Join 在數據庫查詢中是常見的操作,但在某些情況下可能會導致性能問題:

  • 性能影響: 當連接的表數量增加時,查詢性能可能會下降。尤其是當連接的表中有大量數據或者沒有合適的索引時,數據庫引擎需要執行大量的數據掃描和內存操作,導致查詢變慢。
  • 復雜性增加: 多表 Join 可能會導致查詢語句變得復雜難以理解和維護。特別是在連接多個表時,需要考慮連接條件、連接順序等問題,容易出現錯誤。
  • 并發性問題: 多表 Join 可能導致數據庫鎖的競爭增加,從而影響系統的并發性能。特別是在高并發場景下,多表 Join 可能會導致數據庫資源爭奪,降低系統的吞吐量。

因此,盡管多表 Join 是數據庫查詢中常用的操作,但在實際應用中需要謹慎使用,特別是在大數據量、高并發的場景下,需要考慮查詢性能、復雜性和并發性等方面的問題。

2)MySQL 深度分頁有什么解決思路?

在處理大數據量的情況下,如果需要進行深度分頁(即跳過大量的行再進行查詢),傳統的 LIMIT offset, limit 查詢可能會導致性能問題。因為數據庫需要掃描并跳過 offset 行之前的數據,這會導致性能下降。以下是一些解決思路:

  • 使用游標分頁: 使用游標進行分頁查詢,可以避免數據庫掃描和跳過 offset 行的問題。通過在每次查詢中記錄上次查詢的最后一條記錄的主鍵或唯一鍵值,然后基于這個鍵值進行下一次查詢,可以實現高效的分頁查詢。
  • 使用基于范圍的分頁: 通過記錄上一次查詢結果的最后一條記錄的值,然后在下一次查詢中使用 WHERE 條件限制范圍,可以實現高效的分頁查詢。例如,WHERE id > last_id ORDER BY id LIMIT page_size
  • 使用緩存: 對于靜態或者不經常變化的數據,可以將查詢結果緩存起來,以提高分頁查詢的性能。可以使用內存緩存或者分布式緩存來實現。
  • 優化查詢語句: 對于復雜的查詢語句,可以優化數據庫的索引和查詢計劃,以提高查詢性能。可以使用 Explain 或者 Profile 命令來分析查詢語句的性能瓶頸,然后針對性地進行優化。

3)如何監控慢 SQL?

監控慢 SQL 對于及時發現和解決數據庫性能問題非常重要。以下是一些常用的監控慢 SQL 的方法:

  • 使用數據庫性能監控工具: 可以使用數據庫性能監控工具來監控數據庫的性能指標和慢查詢日志,例如 MySQL 的 Performance Schema 或者 Percona Toolkit。
  • 配置慢查詢日志: 可以在數據庫服務器上配置慢查詢日志,記錄執行時間超過閾值的查詢語句。可以通過分析慢查詢日志來發現潛在的性能問題。
  • 使用監控系統: 可以使用監控系統來監控數據庫的性能指標和慢查詢情況,例如 Prometheus、Datadog 等監控系統。
  • 定期分析和優化: 定期分析數據庫的性能指標和慢查詢日志,發現潛在的性能問題,并進行優化。可以通過分析查詢執行計劃、添加索引、優化 SQL 語句等方式來提高查詢性能。
  • 實時警報: 可以配置實時警報機制,當發現慢查詢或者性能異常時及時發送警報通知相關人員,以便及時處理和解決問題。

綜上所述,監控慢 SQL 是數據庫性能優化的重要手段,通過合適的監控工具和方法,可以及時發現和解決數據庫性能問題,保障系統的穩定性和性能。

4)Delete、Drop、Truncate 有什么區別?

  • DELETE: DELETE 語句用于從表中刪除行,但保留表的結構。它會觸發表的觸發器(如果有的話),并且可以與 WHERE 子句一起使用來指定要刪除的行。DELETE 語句執行后,表的空間不會釋放,而是會留下被刪除行的空間用于后續的插入。
  • DROP: DROP 語句用于完全刪除數據庫中的表,包括表的結構和數據。執行 DROP 語句后,表的定義以及表中的所有數據都會被永久刪除,無法恢復。
  • TRUNCATE: TRUNCATE 語句用于從表中刪除所有的行,但保留表的結構。與 DELETE 不同的是,TRUNCATE 語句不會觸發表的觸發器,并且通常比 DELETE 語句執行得更快,因為它不會記錄刪除的行。執行 TRUNCATE 后,表的空間會被釋放,但表的定義仍然保留。

5)Inner Join、Left Join、Right Join 有啥區別?

  • Inner Join(內連接): Inner Join 返回兩個表中匹配行的交集。即只返回兩個表中共同滿足連接條件的行。如果一個表中沒有匹配的行,則不會顯示。
  • Left Join(左連接): Left Join 返回左表中的所有行,以及右表中匹配的行。如果右表中沒有匹配的行,則會用 NULL 填充。換句話說,無論右表中是否有匹配的行,左表中的每一行都會顯示。
  • Right Join(右連接): Right Join 和 Left Join 相反,它返回右表中的所有行,以及左表中匹配的行。如果左表中沒有匹配的行,則會用 NULL 填充。換句話說,無論左表中是否有匹配的行,右表中的每一行都會顯示。

6)索引失效的場景列舉一下

索引失效通常是指數據庫查詢時,本應使用索引加速查詢,但由于某些原因導致索引無法發揮作用,查詢性能降低。以下是一些常見的索引失效場景:

  • 未使用索引列: 當查詢中的條件不是索引列,或者條件中使用了函數、類型轉換等操作時,數據庫可能無法使用索引。
  • 使用不等于(!=): 不等于操作符(!=)通常無法利用索引,因為它不是一個范圍查詢,而是一個非范圍查詢。
  • 使用 LIKE 操作符: 如果 LIKE 操作符的模式以通配符開頭(例如 ‘%value’),索引也無法被利用。但如果模式不以通配符開頭(例如 ‘value%’),索引可以被利用。
  • 使用 OR 操作符: 當查詢條件中使用 OR 操作符連接多個條件時,如果其中一個條件無法使用索引,整個查詢可能都無法使用索引。
  • 表達式索引失效: 當索引列參與了表達式、函數或者類型轉換等操作時,索引可能會失效。
  • 隱式類型轉換: 當查詢條件中的列類型與索引列的類型不匹配,或者類型需要進行隱式類型轉換時,索引可能會失效。
  • 統計信息不準確: 如果數據庫的統計信息不準確,可能會導致數據庫選擇錯誤的執行計劃,從而導致索引失效。

綜上所述,索引失效可能會導致數據庫查詢性能下降,因此在設計數據庫索引和查詢時,需要注意避免以上列舉的情況,以確保索引能夠發揮應有的作用。

7)怎么查詢索引是否被使用

要查看索引是否被查詢使用,可以通過數據庫的性能監控工具或者執行計劃來進行檢查。在大多數數據庫系統中,可以使用以下方法:

  • 執行計劃(Explain): 使用數據庫系統提供的 EXPLAIN 或類似的關鍵字,可以查看查詢語句的執行計劃。執行計劃會顯示查詢是如何執行的,包括是否使用了索引。
  • 性能監控工具: 大多數數據庫系統提供了性能監控工具,可以用來監控數據庫的性能指標。這些工具通常會顯示每個查詢的執行情況,包括是否使用了索引。

8)索引優化的例子舉幾個

索引優化是提高數據庫查詢性能的關鍵。以下是一些常見的索引優化例子:

  • 選擇合適的索引類型: 根據查詢的特點選擇合適的索引類型,如普通索引、唯一索引、組合索引等。
  • 刪除不必要的索引: 刪除沒有使用或者很少使用的索引,以減少索引維護的開銷。
  • 創建覆蓋索引: 創建覆蓋索引可以減少查詢的 IO 操作,提高查詢性能。
  • 優化索引列順序: 對于組合索引,將最常用的列放在前面可以提高索引的效率。
  • 避免使用 SELECT *: 盡量避免使用 SELECT * 查詢所有列,而是只查詢需要的列,以減少索引的使用和 IO 操作。

9)數據庫常用引擎有哪些?

常用的數據庫引擎包括但不限于:

  • MySQL: InnoDB、MyISAM、Memory、Archive 等。
  • PostgreSQL: PostgreSQL 默認引擎、PostgreSQL 后端引擎。
  • SQL Server: SQL Server 默認引擎、SQL Server 后端引擎。
  • Oracle: Oracle 默認引擎、Oracle 后端引擎。
  • SQLite: SQLite 默認引擎。

不同的數據庫引擎具有不同的特點和適用場景,選擇合適的引擎取決于具體的需求和情況。

10)數據庫事務是什么意思?

數據庫事務是指一組數據庫操作,要么全部成功執行,要么全部失敗回滾,保證數據庫的一致性和完整性。事務具有以下四個特性,通常被稱為 ACID 特性:

  • 原子性(Atomicity): 事務中的所有操作要么全部執行成功,要么全部失敗回滾,不存在部分執行的情況。
  • 一致性(Consistency): 事務在執行前后,數據庫的狀態應保持一致性。即數據庫的完整性約束應得到滿足。
  • 隔離性(Isolation): 事務之間應該相互隔離,一個事務的執行不應該影響其他事務的執行。數據庫系統需要保證事務之間的隔離性,以避免并發執行時出現問題。
  • 持久性(Durability): 一旦事務提交,其對數據庫的修改應該是永久性的,即使發生系統崩潰或斷電等故障,數據庫的狀態也應該能夠恢復到事務提交后的狀態。

事務可以通過 BEGIN TRANSACTION、COMMIT、ROLLBACK 等語句來控制。在數據庫應用中,事務通常用于保證復雜操作的一致性,確保數據的完整性和可靠性。

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

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

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

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

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

相關文章

特征工程技巧—Bert

前段時間在參加比賽,發現有一些比賽上公開的代碼,其中的數據預處理步驟值得我們參考。 平常我們見到的都是數據預處理,現在我們來講一下特征工程跟數據預處理的區別。 數據預處理是指對原始數據進行清洗、轉換、縮放等操作,以便為…

Blackwell未來發展之路究竟如何?

英偉達Blackwell如何重塑AI計算的未來? 前言 臺灣大學演講 就在6月2日,英偉達CEO黃仁勛在中國臺灣大學綜合體育館發表了最新的演講。這次黃仁勛的演講依舊重磅,更值得注意的是這次演講中還透露了Blackwell今后的發展之路。 介紹Blackwell 介紹…

MongoDB CRUD操作:地理位置查詢

MongoDB CRUD操作:地理位置查詢 文章目錄 MongoDB CRUD操作:地理位置查詢地理空間數據GeoJSON對象傳統坐標對通過數組指定(首選)通過嵌入文檔指定 地理空間索引2dsphere2d 地理空間查詢地理空間查詢運算符地理空間聚合階段 地理空…

拿筆記下來!產品采購制造類合同怎樣寫比較穩妥?

拿筆記下來!產品采購制造類合同怎樣寫比較穩妥? 近日,幾經波折,泰中兩國終于完成了潛艇采購談判!你知道嗎?產品制造類合同或協議在起草前如果沒有充分考慮各種因素,可能會導致一系列問題和不利…

C語言學習:數據類型

一、 為什么要引入數據類型 ? 計算機中每個字節都有一個地址(類似門牌號) ? CPU通過 地址 來訪問這個字節的空間 0x20001103 1 0 0 1 0 0 1 1 0x20001102 1 1 1 0 1 1 1 0 0x20001101 1 1 1 1 0 1 0 1 0x20001100 0 …

linux c socket編程里SO_REUSEADDR的作用

比如下面的代碼 int reuse 1; int ret setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse)); if (ret SOCKET_ERROR) {log_error("_SetReuseAddr failed, err_code%d, fd%d", _GetErrorCode(), fd); }代碼解釋 setsockopt 函數用于設置…

無人監控視頻輸出卡頓狀態

設計思路,如下: 1.通過采集卡將視頻信號輸出到個人PC中 2.PC按設置好的時間,視頻屬性分片保存 3.將步驟2中的視頻,按預處理要求,得到待計算的視頻片段 4.使用SSIM算法計算預處理后的視頻,將計算得到的數據存…

聊天機器人的實踐過程

一、語聊機器人 OpenAI 的爆火,到如今也才一年多的時間,然而在過去的一年中,生成式AI的落地場景幾乎 80%都是 ChatBot 的形式,那么今天這篇文章我們就來聊一下,生成式AI和IM能擦出怎么樣的火花?以及各種場…

p13idea的其他操作

1 導入模塊 錯誤示范: 正確示范: 2 刪除模塊 必須用delete才能刪除干凈,用remove刪了之后還要回到文件里面把它刪除掉

有錢還系統源碼 人人還眾籌還錢模式還貸系統源碼

盈利模式: 1.系統里直推400 2.間推得200 3.升級是隔代匹配200 4.漏單直接設置歸系統 5.九級匹配不到直接歸平臺 有錢還平臺新注冊會員,即新入的負債者要分9次分別資助先來的11名負債者每人200元,這筆資助不是一次性給到對方&#xff0c…

Prism 入門04,導航功能

當前章節,沿用 上一章使用Prism 框架創建的WPF 項目空模板。在上一章節,各個不同的模塊之間能夠進行切換并把內容呈現在主程序的頁面當中(其實是通過在主程序中注冊的區域去發起一個導航的請求,然后跳轉到對應的視圖。也就是實現了導航跳轉功能)。 為什么能實現導航的跳轉?…

Mybatis的一級緩存

緩存 MyBatis 包含一個非常強大的查詢緩存特性,它可以非常方便地配置和定制。MyBatis 3 中的緩存實現的很多改進都已經實現了,使得它更加強大而且易于配置。 Mybatis和Hibernate一樣,也有一級和二級緩存,同樣默認開啟的只有一級緩存,二級緩…

docker-compose安裝多環境apollo

下載數據庫sql文件 https://github.com/apolloconfig/apollo/blob/master/scripts/sql/src/apolloconfigdb.sql https://github.com/apolloconfig/apollo/blob/master/scripts/sql/src/apolloportaldb.sql 創建庫并導入表 #生產環境 mysql> CREATE DATABASE IF NOT EXIS…

腦部磁共振成像腫瘤分割方法(MATLAB 2018)

近年腦腫瘤發病率呈上升趨勢,約占全身腫瘤的5%,占兒童腫瘤的70%。CT、MRI等多種影像檢查方法可用于檢測腦腫瘤,其中MRI應用于腦腫瘤成像效果最佳。精準的腦腫瘤分割是病情診斷、手術規劃及后期治療的必備條件,既往研究者對腦部腫瘤…

Python知識點12---Python的I/O操作

提前說一點:如果你是專注于Python開發,那么本系列知識點只是帶你入個門再詳細的開發點就要去看其他資料了,而如果你和作者一樣只是操作其他技術的Python API那就足夠了。 Python的流(I/O)操作,最簡單的其實就是輸入和輸出&#x…

擴展翡蜀定理問題

問題描述 給定一個大小為 n n n 的集合 A { a 1 , a 2 ~ a n } A\{a_1,a_2 \sim a_n\} A{a1?,a2?~an?},滿足條件 gcd ( A ) 1 \text{gcd}(A)1 gcd(A)1。 O ( 1 ) O(1) O(1)時間內 求最大的 k k k ,滿足不存在一個大小為 n n n 的非負數集合…

工廠的精益生產如此重要

什么是工廠的精益生產 精益生產(Lean Manufacturing)是一種起源于20世紀50年代日本豐田汽車公司的生產管理哲學。它的核心理念是通過消除生產過程中的浪費,優化流程,提高效率,從而實現成本降低和質量提升。精益生產不僅…

VRTK4.0學習——(二)

手柄綁定以及顯示 1.導入CameraRigs.UnityXRPluginFramework 和 CameraRigs.TrackedAlias 預設,將CameraRigs.UnityXRPluginFramework拖入CameraRigs.TrackedAlias的Elements中即可,運行軟件后即可看到手柄了 注:如果無法看到手柄&#xff…

MySQL:MySQL執行一條SQL查詢語句的執行過程

當多個客戶端同時連接到MySQL,用SQL語句去增刪改查數據,針對查詢場景,MySQL要保證盡可能快地返回客戶端結果。 了解了這些需求場景,我們可能會對MySQL進行如下設計: 其中,連接器管理客戶端的連接,負責管理連接、認證鑒權等;查詢緩存則是為了加速查詢,命中則直接返回結…

Linux Shell Script 編寫入門

Linux Shell 腳本是一種強大的工具,能夠幫助用戶自動化任務、簡化系統管理以及提高工作效率。本文將帶您全面了解如何編寫 Linux Shell 腳本,并介紹一些常見的腳本編寫技巧和注意事項。 目錄 什么是 Linux ShellShell 腳本的基本結構常用 Shell 命令變…