1. 程式人生 > 實用技巧 >55個MySQL優化學習筆記

55個MySQL優化學習筆記

一般來說,準備MySQL面試,無非要從這幾塊進行準備:

  • 查詢
  • 儲存
  • 事務
  • 效能調優

不少朋友苦於蒐集資料耗時耗力,很難cover主面試官的考核角度。為了讓大家在準備面試時少走彎路,這裡小編熬夜一週為大家精心準備的一份MySQL核心技術思維導圖以及各大廠MySQL面試的主流考點,經過多次迭代,最終形成了這份MySQL面試文件及學習筆記,關注公眾號:麒麟改bug。

MySQL基礎到調優面試題(附答案)

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

(1)如果表的型別是 MyISAM,那麼是 18

因為 MyISAM表會把自增主鍵的最大 ID 記錄到資料檔案裡,重啟 MySQL 自增主鍵的最大ID也不會丟失

(2)如果表的型別是 InnoDB,那麼是 15

InnoDB 表只是把自增主鍵的最大 ID 記錄到記憶體中,所以重啟資料庫或者是對錶進行OPTIMIZE 操作,都會導致最大 ID 丟失

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

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

3、Heap 表是什麼?

HEAP 表存在於記憶體中,用於臨時高速儲存。

BLOB 或 TEXT 欄位是不允許的,只能使用比較運算子=,<,>,=>,= <

HEAP 表不支援 AUTO_INCREMENT,索引不可為 NULL

4、Mysql 伺服器預設埠是什麼?

Mysql 伺服器的預設埠是 3306。

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

Mysql 是開源軟體,隨時可用,無需付費。Mysql 是行動式的,帶有命令提示符的 GUI。使用 Mysql 查詢瀏覽器支援管理

6、如何區分 FLOAT 和 DOUBLE?

FLOAT 和 DOUBLE 的區別:

浮點數以 8 位精度儲存在 FLOAT 中,並且有四個位元組。浮點數儲存在 DOUBLE 中,精度為 18 位,有八個位元組。

7、區分 CHAR_LENGTH 和 LENGTH?

CHAR_LENGTH 是字元數,而 LENGTH 是位元組數。Latin 字元的這兩個資料是相同的,但是對於 Unicode 和其他編碼,它們是不同的。

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

SQL 標準定義的四個隔離級別為:

read uncommited :讀到未提交資料

read committed:髒讀,不可重複讀

repeatable read:可重讀

serializable :序列事物

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

ENUM 是一個字串物件,用於指定一組預定義的值,並可在建立表時使用。Create table size(name ENUM('Smail,'Medium','Large');

10、如何定義 REGEXP?

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

11、CHAR 和 VARCHAR 的區別?

以下是 CHAR 和 VARCHAR 的區別:

CHAR 和 VARCHAR 型別在儲存和檢索方面有所不同

CHAR 列長度固定為建立表時宣告的長度,長度值範圍是 1 到 255

當 CHAR 值被儲存時,它們被用空格填充到特定長度,檢索 CHAR 值時需刪除尾隨空格。

12、列的字串型別可以是什麼?

字串型別是:

SET、BLOB、ENUM、CHAR、TEXT、VARCHAR

13、如何獲取當前的 Mysql 版本?

SELECT VERSION();用於獲取當前 Mysql 的版本。

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

儲存引擎稱為表型別,資料使用各種技術儲存在檔案中。

技術涉及:Storage mechanism、Locking levels、Indexing、Capabilities and functions.

15、Mysql 驅動程式是什麼?

以下是 Mysql 中可用的驅動程式:
PHP 驅動程式、JDBC 驅動程式、ODBC 驅動程式、CWRAPPER、PYTHON 驅動程式、PERL 驅動程式、RUBY 驅動程式、CAP11PHP 驅動程式
Ado.net5.mxj

16、TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 資料型別上做什麼?

建立表時 TIMESTAMP 列用 Zero 更新。只要表中的其他欄位發生更改,UPDATE CURRENT_TIMESTAMP 修飾符就將時間戳欄位更新為當前時間。

17、主鍵和候選鍵有什麼區別?

表格的每一行都由主鍵唯一標識,一個表只有一個主鍵。主鍵也是候選鍵。按照慣例,候選鍵可以被指定為主鍵,並且可以用於任何外來鍵引用。

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

我們可以通過以下命令登入:[mysql dir]/bin/mysql -h hostname -u

19、 myisamchk 是用來做什麼的?

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

20、MYSQL 資料庫伺服器效能分析的方法命令有哪些?

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

Heal 表的大小可通過稱為 max_heap_table_size 的 Mysql 配置變數來控制。

22、MyISAM Static 和 MyISAM Dynamic 有什麼區別?

在 MyISAM Static 上的所有欄位有固定寬度。動態 MyISAM 表將具有像 TEXT,BLOB 等欄位,以適應不同長度的資料型別。點選這裡有一套最全阿里面試題總結。MyISAM Static 在受損情況下更容易恢復。

23、federated 表是什麼?

federated 表,允許訪問位於其他伺服器資料庫上的表。

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

每當行被更改時,時間戳欄位將獲取當前時間戳。

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

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

26、怎樣才能找出最後一次插入時分配了哪個自動增量?

LAST_INSERT_ID 將返回由 Auto_increment 分配的最後一個值,並且不需要指定表名稱。

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

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

28.、LIKE 宣告中的%和_是什麼意思?

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

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

UNIX_TIMESTAMP 是從 Mysql 時間戳轉換為 Unix 時間戳的命令、FROM_UNIXTIME 是從 Unix 時間戳轉換為 Mysql 時間戳的命令

30、列對比運算子是什麼?

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

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

行數可以通過以下程式碼獲得:

SELECT COUNT(user_id)FROM users;
複製程式碼

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

不區分

SELECT VERSION(), CURRENT_DATE;

SeLect version(), current_date;

seleCt vErSiOn(), current_DATE;
複製程式碼

所有這些例子都是一樣的,Mysql 不區分大小寫。

33.、LIKE 和 REGEXP 操作有什麼區別?

LIKE 和 REGEXP 運算子用於表示^和%。

SELECT * FROM employee WHERE emp_name REGEXP "^b";

SELECT * FROM employee WHERE emp_name LIKE "%b";
複製程式碼

34.、BLOB 和 TEXT 有什麼區別?

BLOB 是一個二進位制物件,可以容納可變數量的資料。有四種類型的 BLOB -TINYBLOB、BLOB、MEDIUMBLOB 和LONGBLOB、它們只能在所能容納價值的最大長度上有所不同。TEXT 是一個不區分大小寫的 BLOB。四種 TEXT 型別:TINYTEXT、TEXT、MEDIUMTEXT 和LONGTEXT它們對應於四種 BLOB 型別,並具有相同的最大長度和儲存要求。BLOB 和 TEXT 型別之間的唯一區別在於對 BLOB 值進行排序和比較時區分大小寫,對 TEXT
值不區分大小寫。

35、mysql_fetch_array 和 mysql_fetch_object 的區別是什麼?

以下是 mysql_fetch_array 和 mysql_fetch_object 的區別:

mysql_fetch_array() - 將結果行作為關聯陣列或來自資料庫的常規陣列返回。

mysql_fetch_object - 從資料庫返回結果行作為物件。

36、我們如何在 mysql 中執行批處理模式?

以下命令用於在批處理模式下執行:
mysql;
mysql mysql.out

37、MyISAM 表格將在哪裡儲存,並且還提供其儲存格式?

每個 MyISAM 表格以三種格式儲存在磁碟上:

·“.frm”檔案儲存表定義

·資料檔案具有“.MYD”(MYData)副檔名

索引檔案具有“.MYI”(MYIndex)副檔名

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

共有 5 種類型的表格:

MyISAM、Heap、Merge、INNODB、ISAM

MyISAM 是 Mysql 的預設儲存引擎。

39、ISAM 是什麼?

ISAM 簡稱為索引順序訪問方法。它是由 IBM 開發的,用於在磁帶等輔助儲存系統上儲存和
檢索資料。

40、InnoDB 是什麼?

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

41、Mysql 如何優化 DISTINCT?

DISTINCT 在所有列上轉換為 GROUP BY,並與 ORDER BY 子句結合使用。

SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
複製程式碼

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

如果想輸入字元為十六進位制數字,可以輸入帶有單引號的十六進位制數字和字首(X),或者只用(Ox)字首輸入十六進位制數字。如果表示式上下文是字串,則十六進位制數字串將自動轉換為字串。

43、如何顯示前 50 行?

在 Mysql 中,使用以下程式碼查詢顯示前 50 行:

SELECT*FROM

LIMIT 0,50;
複製程式碼

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

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

45、NOW()和 CURRENT_DATE()有什麼區別?

NOW()命令用於顯示當前年份,月份,日期,小時,分鐘和秒

CURRENT_DATE()僅顯示當前年份,月份和日期。

46、什麼樣的物件可以使用 CREATE 語句建立?

以下物件是使用 CREATE 語句建立的:

DATABASE、EVENT、FUNCTION、INDEX、PROCEDURE、TABLE、TRIGGER、USER、VIEW

47、Mysql 表中允許有多少個 TRIGGERS? 在 Mysql 表中允許有六個觸發器。

48、什麼是非標準字串型別?

49、什麼是通用 SQL 函式?

50、解釋訪問控制列表

52、mysql 裡記錄貨幣用什麼欄位型別好

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

54、mysql 有關許可權的表都有哪幾個?

55、Mysql 中有哪幾種鎖?


作者:麒麟改bug
連結:https://juejin.cn/post/6911863410850430990
來源:掘金
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。