• 首頁 > 酒水分類 > 白酒

    mysql數據庫面試題目,mysql數據庫面試題2020

    酒易淘 白酒 2022-08-07 09:10:45

    品牌名稱:醬香白酒加盟 所屬行業:酒水 > 白酒

    基本投資:10~50萬元 投資熱度:

    加盟意向:1634 門店數量:534家

    索要資料 查看詳情

      

      一個互聯網產品的架構通常包括接入層、邏輯處理層和存儲層,其中存儲層承擔數據落地和持久化的任務,為邏輯處理層提供數據查詢功能支持。   

      

      那么說到存儲層,就要說到數據庫了,對數據庫的掌握也是軟件測試工程師面試考察的必備知識點之一。   

      

      我給大家準備了一些關于MySQL數據庫的經典面試問題,大家可以參考一下,多多學習。   

      

      01   

      

      用一句話介紹一下MySQL是什么?   

      

      MySQL是一個開源的關系數據管理系統,用于訪問、查詢、更新和管理數據。   

      

      02   

      

      MySQL數據庫去重的關鍵詞是什么?   

      

      從表名中選擇不同的字段名   

      

      數據庫附帶的關鍵字distinct過濾掉冗余的重復記錄,只保留一條,但它通常只用于返回重復記錄的數量,而不是重復記錄的所有值。原因是distinct只能返回其目標字段,而不能返回其他字段。   

      

      03   

      

      MySQL多表連接的方式有哪些?如何使用?這些聯系有什么區別?   

      

      連接方式:左連接、右連接和內連接:左連接:從a.id=b.id上的一個左連接b中選擇*;   

      

      right:select * from a right join b on a . id=b . id;   

      

      within:select * from a . xx=b . xx上的一個內部聯接b;(其中inner可以省略)   

      

      區別:內連接,兩個表連接時,只保留兩個表中完全匹配的結果集。   

      

      當聯接兩個表時,LEFT將返回左表中的所有行,即使右表中沒有匹配的記錄。   

      

      當兩個表被聯接時,Right join將返回右表中的所有行,即使左表中沒有匹配的記錄。   

      

      04   

      

      MySQL數據庫和Redis有什么區別?   

      

      MySQL和Redis都可以存儲數據,但是MySQL中的數據是永久的,而Redis中的數據是緩存的,有緩存機制。當新數據到來時,根據緩存機制,舊數據將失效。但是從Redis讀取數據更快更方便,而MySQL邏輯復雜,數據量大,讀取數據時間長。   

      

      05   

      

      說說索引的優缺點?   

      

      優點:唯一索引可以保證數據庫表中每一行數據的唯一性。索引可以加快數據查詢速度,減少查詢時間。   

      

      缺點:創建和維護索引需要時間。索引需要占用物理空間。除了數據表之外,每個索引也會占用一定的物理空間。在添加、刪除和更改表中的數據時,也應該動態地維護索引。   

      

      06   

      

      什么是死鎖?怎么解決?   

      

      死鎖是指兩個或兩個以上的事務在同一資源上互相占用,請求鎖定對方的資源,導致惡性循環的現象。   

      

         

      

      有四個必要條件:互斥條件、請求保持條件、循環等待條件和無剝奪條件。   

      

      解決死鎖的思路一般是切斷循環,盡量避免循環的并發形成。如果不同的程序將并發訪問多個表,請嘗試同意以相同的順序訪問表,這可以大大減少死鎖的機會。在同一個事務中,盡量一次性鎖定所有需要的資源,降低死鎖的概率;對于容易出現死鎖的業務部分,可以嘗試使用升級鎖定粒度,通過表級鎖定來降低死鎖的概率;如果業務處理不好,可以使用分布式事務鎖或者樂觀鎖。死鎖與索引密切相關。要解決索引問題,就要對索引進行合理的優化。   

      

      07   

      

      什么是視圖?為什么要使用視圖?   

      

      視圖是一個虛擬的表格,是數據經過某種過濾后在表格中的顯示方式。該視圖由預定義的查詢select語句組成。   

      

      為了提高復雜SQL語句的可重用性和表操作的安全性,MySQL數據庫管理系統提供了視圖特性。   

      

      08   

      

      視圖的特點是什么?有哪些使用場景?   

      

      視圖的特性:視圖的列可以來自不同的表,這些表是表的抽象,是在邏輯意義上建立的新關系。視圖由基本表(真實表)產生。   

    生的表(虛表)。視圖的建立和刪除不影響基本表。對視圖內容的更新(添加,刪除和修改)直接影響基本表。當視圖來自多個基本表時,不允許添加和刪除數據。

      

    視圖用途:簡化sql查詢,提高開發效率,兼容老的表結構。

      

    視圖的常見使用場景:重用SQL語句;簡化復雜的SQL操作。使用表的組成部分而不是整個表;保護數據更改數據格式和表示。視圖可返回與底層表的表示和格式不同的數據。

      


      

    09

      

    講一下視圖的優缺點?

      

    查詢簡單化。視圖能簡化用戶的操作數據安全性。視圖使用者能以多種角度看待同一數據,能夠對機密數據提供安全保護邏輯數據獨立性。視圖對重構數據庫提供了一定程度的邏輯獨立性

      


      

    10

      

    MySQL的約束有哪些?

      

    NOT NULL: 約束字段的內容一定不能為NULL。UNIQUE: 約束字段唯一性,一個表允許有多個Unique約束。PRIMARY KEY: 約束字段唯一,不可重復,一個表只允許存在一個。FOREIGN KEY: 用于預防破壞表之間連接的動作,也能防止非法數據插入外鍵。CHECK: 用于控制字段的值范圍。

      


      

    11

      

    UNION和UNION ALL的區別?

      

    Union:對兩個結果集進行并集操作,不包括重復行,同時進行默認規則的排序;

      


      

    Union All:對兩個結果集進行并集操作,包括重復行,不進行排序;

      


      

    UNION的效率高于UNION ALL

      


      


      

    12

      

    關心過業務系統里面的sql耗時嗎?對慢查詢都怎么優化過?

      

    分析語句,是否加載了不必要的字段/數據。分析SQL執行語句是否命中索引等。如果SQL很復雜,優化SQL結構如果表數據量太大,考慮分表情況

      


      

    13

      

    主鍵使用自增ID還是UUID,為什么?

      

    如果是單機的話,選擇自增ID;如果是分布式系統,優先考慮UUID,但還是最好公司自己有一套分布式唯一ID生產方案。

      


      

    自增ID:數據存儲空間小,查詢效率高。但是如果數據量過大,會超出自增長的值范圍,多庫合并,也有可能出現問題。

      


      

    uuid:適合大量數據的插入和更新操作,但它是無序的,插入數據效率慢,占用空間大。

      


      


      

    14

      

    MySQL數據庫cpu飆升的話,要怎么處理呢?

      

    排查過程:使用top命令觀察,確定是mysqld導致還是其他原因。

      

    如果是mysqld導致的,show processlist,查看session情況,確定是不是有消耗資源的sql在運行。

      

    找出消耗高的 sql,看看執行計劃是否準確, 索引是否缺失,數據量是否太大。

      


      

    處理:kill掉這些線程(同時觀察cpu使用率是否下降),

      

    進行相應的調整(比如說加索引、改sql、改內存參數)

      

    重新跑SQL。

      


      

    其他情況:也有可能是每個sql消耗資源并不多,但是突然之間,有大量的session 連進來導致cpu飆升,這種情況就需要跟應用一起來分析為何連接數會激增,再做出相應的調整,比如說限制連接數等。

      


      


      

    15

      

    什么是存儲過程?有哪些優缺點?

      

    存儲過程,就是一些編譯好了的SQL語句,這些SQL語句代碼像一個方法實現一些功能(對單表或多表的增刪改查),然后給這些代碼塊取一個名字,在用到這個功能的時候調用即可。

      


      

    優點:存儲過程是一個預編譯的代碼塊,執行效率比較高存儲過程在服務器端運行,減少客戶端的壓力允許模塊化程序設計,只需要創建一次過程,以后在程序中就可以調用該過程任意次,類似方法的復用一個存儲過程替代大量SQL語句 ,可以降低網絡通信量,提高通信速率可以一定程度上確保數據安全

      

    缺點:調試麻煩可移植性不靈活存在重新編譯問題

      


      

    16

      

    日常工作中,你是怎么優化sql的?

      

    可以從這幾個維度回答這個問題:

      

    加索引避免返回不必要的數據適當分批量進行優化sql結構分庫分表讀寫分離

      


      

    17

      

    什么情況下應不建或少建索引?

      

    表記錄太少經常插入、刪除、修改的表數據重復且分布平均的表字段,假如一個表有10萬行記錄,有一個字段A只有T和F兩種值,且每個值得分布概率大約為50%,那么對這種表A字段建索引一般不會提高數據庫的查詢速度。經常和主字段一塊查詢但主字段索引值比較多的表字段

      


      

    18

      

    了解什么是表分區嗎?表分區的好處有哪些?

      

    表分區,是指根據一定規則,將數據庫中的一張表分解成多個更小的容易管理的部分。從邏輯上看,只有一張表,但是底層卻是由多個物理分區組成。

      


      

    存儲更多數據。分區表的數據可以分布在不同的物理設備上,從而高效地利用多個硬件設備。和單個磁盤或者文件系統相比,可以存儲更多數據。優化查詢。在where語句中包含分區條件時,可以只掃描一個或多個分區表來提高查詢效率;涉及sum和count語句時,也可以在多個分區上并行處理,最后匯總結果。分區表更容易維護。例如:想批量刪除大量數據可以清除整個分區。避免某些特殊的瓶頸,例如InnoDB的單個索引的互斥訪問。

    免費咨詢
    免費獲取加盟資料
    亚洲国产成人久久综合区