最全MySQL面試20題和答案(一)

来源:https://www.cnblogs.com/cjybigdatablog/p/18346007
-Advertisement-
Play Games

資料庫基礎知識 為什麼要使用資料庫? 數據保存在記憶體 優點:存取速度快 缺點:數據不能永久保存 數據保存在文件 優點:數據永久保存 缺點: 速度比記憶體操作慢,頻繁的IO操作。 查詢數據不方便 數據保存在資料庫 數據永久保存 使用SQL語句,查詢方便效率高。 管理數據方便 什麼是SQL? 結構化查詢語 ...


資料庫基礎知識

  1. 為什麼要使用資料庫?

    • 數據保存在記憶體
      • 優點:存取速度快
      • 缺點:數據不能永久保存
    • 數據保存在文件
      • 優點:數據永久保存
      • 缺點:
        1. 速度比記憶體操作慢,頻繁的IO操作。
        2. 查詢數據不方便
    • 數據保存在資料庫
      1. 數據永久保存
      2. 使用SQL語句,查詢方便效率高。
      3. 管理數據方便
  2. 什麼是SQL?

    • 結構化查詢語言(Structured Query Language)簡稱SQL,是一種資料庫查詢語言。
    • 作用:用於存取數據、查詢、更新和管理關係資料庫系統。
  3. 什麼是MySQL?

    • MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,屬於 Oracle 旗下產品。MySQL 是最流行的關係型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係資料庫管理系統) 應用軟體之一。在Java企業級開發中非常常用,因為 MySQL 是開源免費的,並且方便擴展。
  4. 資料庫三大範式是什麼?

    • 第一範式:每個列都不可以再拆分。
    • 第二範式:在第一範式的基礎上,非主鍵列完全依賴於主鍵,而不能是依賴於主鍵的一部分。
    • 第三範式:在第二範式的基礎上,非主鍵列只依賴於主鍵,不依賴於其他非主鍵。
    • 在設計資料庫結構的時候,要儘量遵守三範式,如果不遵守,必須有足夠的理由。比如性能。事實上我們經常會為了性能而妥協資料庫的設計。
  5. MySQL有關許可權的表都有哪幾個?

    • MySQL伺服器通過許可權表來控制用戶對資料庫的訪問,許可權表存放在mysql資料庫里,由mysql_install_db腳本初始化。這些許可權表分別user,db,table_priv,columns_priv和host。
      • 下麵分別介紹一下這些表的結構和內容:
        • user許可權表:記錄允許連接到伺服器的用戶帳號信息,裡面的許可權是全局級的。
        • db許可權表:記錄各個帳號在各個資料庫上的操作許可權。
        • table_priv許可權表:記錄數據表級的操作許可權。
        • columns_priv許可權表:記錄數據列級的操作許可權。
        • host許可權表:配合db許可權表對給定主機上資料庫級操作許可權作更細緻的控制。這個許可權表不受GRANT和REVOKE語句的影響。
  6. MySQL的binlog有有幾種錄入格式?分別有什麼區別?

    • 有三種格式,statement,row和mixed。
      • statement模式下,每一條會修改數據的sql都會記錄在binlog中。不需要記錄每一行的變化,減少了binlog日誌量,節約了IO,提高性能。由於sql的執行是有上下文的,因此在保存的時候需要保存相關的信息,同時還有一些使用了函數之類的語句無法被記錄複製。
      • row級別下,不記錄sql語句上下文相關信息,僅保存哪條記錄被修改。記錄單元為每一行的改動,基本是可以全部記下來但是由於很多操作,會導致大量行的改動(比如alter table),因此這種模式的文件保存的信息太多,日誌量太大。
      • mixed,一種折中的方案,普通操作使用statement記錄,當無法使用statement的時候使用row。此外,新版的MySQL中對row級別也做了一些優化,當表結構發生變化的時候,會記錄語句而不是逐行記錄。

引擎

  1. MySQL存儲引擎?

    • 常用的存儲引擎有以下:
      • Innodb引擎:Innodb引擎提供了對資料庫ACID事務的支持。並且還提供了行級鎖和外鍵的約束。它的設計的目標就是處理大數據容量的資料庫系統。
      • MyIASM引擎(原本Mysql的預設引擎):不提供事務的支持,也不支持行級鎖和外鍵。
      • MEMORY引擎:所有的數據都在記憶體中,數據的處理速度快,但是安全性不高。
  2. MyISAM與InnoDB區別

    • MyISAM與InnoDB區別
  3. InnoDB引擎的4大特性

    • 插入緩衝(insert buffer)
    • 二次寫(double write)
    • 自適應哈希索引(ahi)
    • 預讀(read ahead)
  4. 存儲引擎選擇

    • 如果沒有特別的需求,使用預設的Innodb即可。
    • MyISAM:以讀寫插入為主的應用程式,比如博客系統、新聞門戶網站。
    • Innodb:更新(刪除)操作頻率也高,或者要保證數據的完整性;併發量高,支持事務和外鍵。比如OA自動化辦公系統。

索引

  1. 什麼是索引?

    • 索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含著對數據表裡所有記錄的引用指針。
    • 索引是一種數據結構。資料庫索引,是資料庫管理系統中一個排序的數據結構,以協助快速查詢、更新資料庫表中數據。索引的實現通常使用B樹及其變種B+樹。
    • 更通俗的說,索引就相當於目錄。為了方便查找書中的內容,通過對內容建立索引形成目錄。索引是一個文件,它是要占據物理空間的。
  2. 索引有哪些優缺點?

    • 索引的優點
      • 可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
      • 通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
    • 索引的缺點
      • 時間方面:創建索引和維護索引要耗費時間,具體地,當對錶中的數據進行增加、刪除和修改的時候,索引也要動態的維護,會降低增/改/刪的執行效率;
      • 空間方面:索引需要占物理空間。
  3. 索引有哪幾種類型?

    • 主鍵索引:數據列不允許重覆,不允許為NULL,一個表只能有一個主鍵。
    • 唯一索引:數據列不允許重覆,允許為NULL值,一個表允許多個列創建唯一索引。
      • 可以通過 ALTER TABLE table_name ADD UNIQUE (column); 創建唯一索引
      • 可以通過 ALTER TABLE table_name ADD UNIQUE (column1,column2); 創建唯一組合索
    • 普通索引:基本的索引類型,沒有唯一性的限制,允許為NULL值。
      • 可以通過 ALTER TABLE table_name ADD INDEX index_name (column); 創建普通索引
      • 可以通過 ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3); 創建組合索引
    • 全文索引: 是目前搜索引擎使用的一種關鍵技術。
      • 可以通過 ALTER TABLE table_name ADD FULLTEXT (column); 創建全文索引
  4. 索引的數據結構(B樹,hash)

    • 索引的數據結構和具體存儲引擎的實現有關,在MySQL中使用較多的索引有Hash索引,B+樹索引等,而我們經常使用的InnoDB存儲引擎的預設索引實現為:B+樹索引。對於哈希索引來說,底層的數據結構就是哈希表,因此在絕大多數需求為單條記錄查詢的時候,可以選擇哈希索引,查詢性能最快;其餘大部分場景,建議選擇BTree索引。
  5. 索引演算法有哪些?

    • 索引演算法有BTree演算法和Hash演算法
      • BTree演算法:BTree是最常用的mysql資料庫索引演算法,也是mysql預設的演算法。它不僅可以用於=,>,>=,<,<=和between這些比較操作符上,而且還可以用於like操作符,只要它的查詢條件是一個不以通配符開頭的常量。
      • Hash演算法:Hash索引只能用於對等比較,例如=,<=>(相當於=)操作符。由於是一次定位數據,不像BTree索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次IO訪問,所以檢索效率遠高於BTree索引。
  6. 索引設計的原則?

    • 適合索引的列是出現在where子句中的列,或者連接子句中指定的列。
    • 基數較小的列,索引效果較差,沒有必要在此列建立索引。
    • 使用短索引,如果對長字元串列進行索引,應該指定一個首碼長度,這樣能夠節省大量索引空間。
    • 不要過度索引。索引需要額外的磁碟空間,並降低寫操作的性能。在修改表內容的時候,索引會進行更新甚至重構,索引列越多,這個時間就會越長。所以只保持需要的索引有利於查詢即可。
  7. 創建索引的原則

    • 索引雖好,但也不是無限制的使用,最好符合以下幾個原則:
      1. 最左首碼匹配原則,組合索引非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。
      2. 較頻繁作為查詢條件的欄位才去創建索引。
      3. 更新頻繁欄位不適合創建索引。
      4. 若是不能有效區分數據的列不適合做索引列(如性別,男女未知,最多也就三種,區分度實在太低)。
      5. 儘量的擴展索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可。
      6. 定義有外鍵的數據列一定要建立索引。
      7. 對於那些查詢中很少涉及的列,重覆值比較多的列不要建立索引。
      8. 對於定義為text、image和bit的數據類型的列不要建立索引。
  8. 創建索引的三種方式,刪除索引

    • 創建索引的三種方式,刪除索引
  9. 創建索引時需要註意什麼?

    • 非空欄位:應該指定列為NOT NULL,除非你想存儲NULL。在MySQL中,含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計信息以及比較運算更加複雜。你應該用0、一個特殊的值或者一個空串代替空值;
    • 取值離散大的欄位:(變數各個取值之間的差異程度)的列放到聯合索引的前面,可以通過count()函數查看欄位的差異值,返回值越大說明欄位的唯一值越多欄位的離散程度高;
    • 索引欄位越小越好:資料庫的數據存儲以頁為單位一頁存儲的數據越多一次IO操作獲取的數據越大效率越高。
  10. 使用索引查詢一定能提高查詢的性能嗎?為什麼?

    • 通常,通過索引查詢數據比全表掃描要快。但是我們也必須註意到它的代價。
    • 索引需要空間來存儲,也需要定期維護,每當有記錄在表中增減或索引列被修改時,索引本身也會被修改。這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁碟I/O。
    • 因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢。使用索引查詢不一定能提高查詢性能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種情況:
      • 基於一個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%
      • 基於非唯一性索引的檢索

好了,今天先分享20題,之後的部分會在後面幾期分享出來,大家在面試之前可以多看看這部分的內容,萬一面試官考到,你答對了,你就比別人更有優勢,一起加油吧!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Percona Toolkit 神器全攻略(系統類) Percona Toolkit 神器全攻略系列共八篇,前文回顧: 前文回顧 Percona Toolkit 神器全攻略 Percona Toolkit 神器全攻略(實用類) Percona Toolkit 神器全攻略(配置類) Percona T ...
  • 索引 百萬級別或以上的數據如何刪除? 關於索引:由於索引需要額外的維護成本,因為索引文件是單獨存在的文件,所以當我們對數據的增加、修改、刪除都會產生額外的對索引文件的操,這些操作需要消耗額外的IO,會降低增/改/刪的執行效率。所以,在我們刪除資料庫百萬級別數據的時候,查詢MySQL官方手冊得知刪除數 ...
  • 背景ClickHouse是一個面向分析型的開源列式資料庫管理系統,它主要應用於以下幾個場景: 數據倉庫和商業智能分析:ClickHouse擅長處理大規模的數據,可以用於構建企業級的數據倉庫,支持複雜的OLAP查詢,可用實時數倉,適合各種商業分析和報表應用。 實時分析和監控:ClickHouse以毫秒 ...
  • Apache SeaTunnel 2.3.6 版本於近日正式發佈,社區期待的 SeaTunnel Zeta Master/Worker 新架構、事件通知機制、支持動態編譯的transform等新功能和新能力在這次版本中都有了全面的更新,並添加了首個向量資料庫 Milvus。此外,本版本還進行了一些基 ...
  • 一、背景 大數據服務是數據平臺建設的基座,隨著B站業務的快速發展,其大數據的規模和複雜度也突飛猛進,技術的追求也同樣不會有止境。 B站一站式大數據集群管理平臺(BMR),在千呼萬喚中孕育而生。本文簡單介紹BMR的由來、面臨的主要矛盾以及如何在變化中求得生存與發展。 下圖是截至2024年6月初,統計到 ...
  • 摘要:現在商用優化器大多都是基於統計信息進行查詢代價評估,因此統計信息是否實時且準確對查詢影響很大,特別是分散式資料庫場景。本文詳細介紹GaussDB(DWS)如何實現了一種輕量、實時、準確的統計信息自動收集方案。 本文分享自華為雲社區《【最佳實踐】GaussDB(DWS) 統計信息自動收集方案》, ...
  • 在大數據時代,企業對數據的依賴程度越來越高。然而,隨著業務的不斷發展和技術的快速迭代,大數據平臺的集群遷移已成為企業數據中台發展途中無法迴避的需求。在大數據平臺發展初期,國內數據中台市場主要以國外開源 CDH、商業化 CDP、HDP 為主。然而,由於國際形勢的轉變,以海外大數據基礎平臺作為基石構建的 ...
  • MySQL UDF 提權初探 對 MySQL UDF 提權做一次探究,什麼情況下可以提權,提取的主機許可權是否跟mysqld進程啟動的主機賬號有關 資料庫信息 MySQL資料庫版本:5.7.21 UDF UDF:(User Defined Function) 用戶自定義函數,MySQL資料庫的初衷是用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...