前言
随着系統使用者量的不斷增加,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之後引入了索引下推優化, 通過适當的使用聯合索引, 減少回表判斷的消耗.
- 若頻繁查詢某一列資料, 可以考慮利用覆寫索引避免回表.
- 聯合索引将高頻字段放在最左邊