天天看點

MySQL優化面試真題彙總(2021最新版)前言

前言

随着系統使用者量的不斷增加,MySQL 索引的重要性不言而喻,對于後端工程師,隻有在了解索引及其優化的規則,并應用于實際工作中後,才能不斷的提升系統性能,開發出高性能、高并發和高可用的系統。 今天小編首先會跟大家分享一下MySQL 索引中的各種概念,然後介紹優化索引的若幹條規則,最後利用這些規則,針對面試中常考的知識點,做詳細的執行個體分析。

1、MySQL 中有哪幾種鎖?

  • 1、表級鎖: 開銷小, 加鎖快; 不會出現死鎖; 鎖定粒度大, 發生鎖沖突的機率最高, 并發度最低。
  • 2、行級鎖: 開銷大, 加鎖慢; 會出現死鎖; 鎖定粒度最小, 發生鎖沖突的機率最低, 并發度也最高。/
  • 3、頁面鎖: 開銷和加鎖時間界于表鎖和行鎖之間; 會出現死鎖; 鎖定粒度界于表鎖和行鎖之間, 并發度一般。

2、MySQL 中有哪些不同的表格?

共有 5 種類型的表格: 1、MyISAM2、Heap 3、Merge 4、INNODB 5、MISAM

3、簡述在MySQL 資料庫中 MyISAM 和InnoDB 的差別

4、MySQL 中InnoDB 支援的四種事務隔離級别名稱,以及逐級之間的差別?SQL 标準定義的四個隔離級别為:

  • 1、read uncommited : 讀到未送出資料
  • 2、read committed: 髒讀, 不可重複讀
  • 3、repeatable read: 可重讀
  • 4、serializable : 串行事物

5、CHAR 和VARCHAR 的差別?

  • 1、CHAR 和 VARCHAR 類型在存儲和檢索方面有所不同
  • 2、CHAR 列長度固定為建立表時聲明的長度, 長度值範圍是 1 到 255 當 CHAR 值被存儲時, 它們被用空格填充到特定長度, 檢索 CHAR 值時需删除尾随空格。

6、主鍵和候選鍵有什麼差別?

  • 表格的每一行都由主鍵唯一辨別,一個表隻有一個主鍵。
  • 主鍵也是候選鍵。按照慣例, 候選鍵可以被指定為主鍵, 并且可以用于任何外鍵引用。

7、myisamchk 是用來做什麼的?

8、如果一個表有一列定義為TIMESTAMP,将發生什麼?

9、你怎麼看到為表格定義的所有索引?

11、列對比運算符是什麼?

在 SELECT 語句的列比較中使用=,<>,<=,<,> =,>,<<,>>,<=>,AND, OR 或 LIKE 運算符。

12、BLOB 和TEXT 有什麼差別?

13、MySQL\_fetch\_array 和MySQL\_fetch\_object 的差別是什麼?

14、MyISAM 表格将在哪裡存儲,并且還提供其存儲格式?

15、MySQL 如何優化DISTINCT?

16、如何顯示前 50 行?

在 MySQL 中, 使用以下代碼查詢顯示前 50 行: SELECT*FROM TABLE LIMIT 0,50;

17、可以使用多少列建立索引?

任何标準表最多可以建立 16 個索引列。

18、NOW()和 CURRENT\_DATE()有什麼差別?

NOW() 指令用于顯示目前年份, 月份, 日期, 小時, 分鐘和秒。CURRENT\_DATE() 僅顯示目前

年份, 月份和日期。

19、什麼是非标準字元串類型?

  • 1、TINYTEXT
  • 2、TEXT
  • 3、MEDIUMTEXT
  • 4、LONGTEXT

20、什麼是通用 SQL 函數?

  • 1、CONCAT(A, B) – 連接配接兩個字元串值以建立單個字元串輸出。通常用于将兩個或多個字段合并為一個字段。
  • 2、FORMAT(X, D)- 格式化數字 X 到 D 有效數字。
  • 3、CURRDATE(), CURRTIME()- 傳回目前日期或時間。
  • 4、NOW() – 将目前日期和時間作為一個值傳回。
  • 5、MONTH(), DAY( ), YEAR(), WEEK(), WEEKDAY() – 從日期值中提取給定資料。
  • 6、HOUR(), MINUTE(), SECOND() – 從時間值中提取給定資料。
  • 7、DATEDIFF( A, B) – 确定兩個日期之間的差異, 通常用于計算年齡
  • 8、SUBTIMES( A, B) – 确定兩次之間的差異。
  • 9、FROMDAYS( INT) – 将整數天數轉換為日期值。

21、MySQL 支援事務嗎?

22、MySQL 裡記錄貨币用什麼字段類型好

23、MySQL 有關權限的表都有哪幾個?

  • MySQL 伺服器通過權限表來控制使用者對資料庫的通路, 權限表存放在 MySQL 資料庫裡,由
  • MySQL\_install\_db 腳本初始化。這些權限表分别 user,db,table\_priv, columns\_priv 和 host 。

24、列的字元串類型可以是什麼?

字元串類型是:

  • 1、SET
  • 2、BLOB
  • 3、ENUM
  • 4、CHAR
  • 5、TEXT

25、MySQL 資料庫作釋出系統的存儲,一天五萬條以上的增量, 預計運維三年,怎麼優化?

26、鎖的優化政策

27、索引的底層實作原理和優化

28、什麼情況下設定了索引但無法使用

29、實踐中如何優化 MySQL

30、優化資料庫的方法

31、簡單描述 MySQL 中,索引,主鍵,唯一索引,聯合索引

32、資料庫中的事務是什麼?

33、SQL 注入漏洞産生的原因?如何防止?

34、為表中得字段選擇合适得資料類型

MySQL面試真題位址:

MySQL優化面試題

35、存儲時期

36、對于關系型資料庫而言,索引是相當重要的概念,請回答

37、解釋 MySQL 外連接配接、内連接配接與自連接配接的差別

38、Myql 中的事務復原機制概述

39、SQL 語言包括哪幾部分?每部分都有哪些操作關鍵字?

40、完整性限制包括哪些?

41、一張表,裡面有 ID 自增主鍵,當 insert 了 17 條記錄之後, 删除了第 15,16,17 條記錄,再把 Mysql 重新開機,再 insert 一條記 錄,這條記錄的 ID 是 18 還是 15 ?

42、Mysql 的技術特點是什麼?

Mysql 資料庫軟體是一個用戶端或伺服器系統,其中包括:支援各種用戶端程式和庫的多線程 SQL 伺服器、不同的後端、廣泛的應用程式程式設計接口和管理工具。

43、Heap 表是什麼?

44、Mysql 伺服器預設端口是什麼?

Mysql 伺服器的預設端口是 3306。

45、與 Oracle 相比,Mysql 有什麼優勢?

46、如何區分 FLOAT 和 DOUBLE?

47、區分 CHAR\_LENGTH 和 LENGTH?

48、請簡潔描述 Mysql 中 InnoDB 支援的四種事務隔離級别名稱,以及逐級之間的差別?

49、在 Mysql 中 ENUM 的用法是什麼?

  • ENUM 是一個字元串對象,用于指定一組預定義的值,并可在建立表時使用。
  • Create table size(name ENUM('Smail,'Medium','Large');

50、如何定義 REGEXP?

REGEXP 是模式比對,其中比對模式在搜尋值的任何位置。

51、CHAR 和 VARCHAR 的差別?

52、列的字元串類型可以是什麼?

53、如何擷取目前的 Mysql 版本?

SELECT VERSION();用于擷取目前 Mysql 的版本。

54、Mysql 中使用什麼存儲引擎?

55、Mysql 驅動程式是什麼?

56、TIMESTAMP 在 UPDATE CURRENT\_TIMESTAMP 資料類型上做什麼?

建立表時 TIMESTAMP 列用 Zero 更新。隻要表中的其他字段發生更改,UPDATE CURRENT\_TIMESTAMP 修飾符就将時間戳字段更新為目前時間。

57、主鍵和候選鍵有什麼差別?

  • 主鍵也是候選鍵。按照慣例,候選鍵可以被指定為主鍵,并且可以用于任何外鍵引用。

58、如何使用 Unix shell 登入 Mysql?

59、myisamchk 是用來做什麼的?

它用來壓縮 MyISAM 表,這減少了磁盤或記憶體使用。

60、MYSQL 資料庫伺服器性能分析的方法指令有哪些?

61、如何控制 HEAP 表的最大尺寸?

Heal 表的大小可通過稱為 max\_heap\_table\_size 的 Mysql 配置變量來控制。

62、MyISAM Static 和 MyISAM Dynamic 有什麼差別?

63、federated 表是什麼?

federated 表,允許通路位于其他伺服器資料庫上的表。

64、如果一個表有一列定義為 TIMESTAMP,将發生什麼?

每當行被更改時,時間戳字段将擷取目前時間戳。

65、列設定為 AUTO INCREMENT 時,如果在表中達到最大值,會發生什麼情況?

它會停止遞增,任何進一步的插入都将産生錯誤,因為密鑰已被使用。

66、怎樣才能找出最後一次插入時配置設定了哪個自動增量?

LAST\_INSERT\_ID 将傳回由 Auto\_increment 配置設定的最後一個值,并且不需要指定表名稱。

67、你怎麼看到為表格定義的所有索引?

  • 索引是通過以下方式為表格定義的:
  • SHOW INDEX FROM ;

68、LIKE 聲明中的%和\_是什麼意思?

%對應于 0 個或更多字元,\_隻是 LIKE 語句中的一個字元。

69、如何在 Unix 和 Mysql 時間戳之間進行轉換?

  • UNIX\_TIMESTAMP 是從 Mysql 時間戳轉換為 Unix 時間戳的指令
  • FROM\_UNIXTIME 是從 Unix 時間戳轉換為 Mysql 時間戳的指令

70、列對比運算符是什麼?

在 SELECT 語句的列比較中使用=,<>,<=,<,> =,>,<<,>>,<=>,AND,OR 或LIKE 運算符。

71、我們如何得到受查詢影響的行數?

  • 行數可以通過以下代碼獲得:
  • SELECT COUNT(user\_id)FROM users;

72、Mysql 查詢是否區分大小寫?

不區分

  • SELECT VERSION(), CURRENT\_DATE;
  • SeLect version(), current\_date;
  • seleCt vErSiOn(), current\_DATE;
  • 所有這些例子都是一樣的,Mysql 不區分大小寫。

73、LIKE 和 REGEXP 操作有什麼差別?

74、BLOB 和 TEXT 有什麼差別?

75、mysql\_fetch\_array 和 mysql\_fetch\_object 的差別是什麼?

76、我們如何在 mysql 中運作批處理模式?

77、MyISAM 表格将在哪裡存儲,并且還提供其存儲格式?

78、Mysql 中有哪些不同的表格?

79、ISAM 是什麼?

  • ISAM 簡稱為索引順序通路方法。它是由 IBM 開發的,用于在錄音帶等輔助存儲系統上存儲和檢索資料。

80、InnoDB 是什麼?

  • lnnoDB 是一個由 Oracle 公司開發的 Innobase Oy 事務安全存儲引擎。

81、Mysql 如何優化 DISTINCT?

82、如何輸入字元為十六進制數字?

83、如何顯示前 50 行?

84、可以使用多少列建立索引?

85、NOW()和 CURRENT\_DATE()有什麼差別?

86、什麼樣的對象可以使用 CREATE 語句建立?

87、Mysql 表中允許有多少個 TRIGGERS?

88、什麼是非标準字元串類型?

89、什麼是通用 SQL 函數?

90、解釋通路控制清單

91、MYSQL 支援事務嗎?

92、mysql 裡記錄貨币用什麼字段類型好

93、MYSQL 資料表在什麼情況下容易損壞?

  • 伺服器突然斷電導緻資料檔案損壞。
  • 強制關機,沒有先關閉 mysql 服務等。

94、mysql 有關權限的表都有哪幾個?

95、Mysql 中有哪幾種鎖?

96、唯一索引比普通索引快嗎, 為什麼

97、MySQL由哪些部分組成, 分别用來做什麼

98、MySQL查詢緩存有什麼弊端, 應該什麼情況下使用, 8.0版本對查詢緩存有什麼變更.

99、MyISAM和InnoDB**的差別有哪些

100、MySQL怎麼恢複半個月前的資料

  • 通過整庫備份+binlog進行恢複. 前提是要有定期整庫備份且儲存了binlog日志.

101、MySQL事務的隔離級别, 分别有什麼特點

102、做過哪些MySQL索引相關優化

  • 盡量使用主鍵查詢: 聚簇索引上存儲了全部資料, 相比普通索引查詢, 減少了回表的消耗.
  • MySQL5.6之後引入了索引下推優化, 通過适當的使用聯合索引, 減少回表判斷的消耗.
  • 若頻繁查詢某一列資料, 可以考慮利用覆寫索引避免回表.
  • 聯合索引将高頻字段放在最左邊

103、簡要說一下資料庫範式

104、一千萬條資料的表, 如何分頁查詢

105、訂單表資料量越來越大導緻查詢緩慢, 如何處理