太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

愛因斯坦說過“耐心和恆心總會得到報酬的”,我也一直把這句話當做自己的座右銘,這句箴言在今年也徹底在“我”身上實現了。

每一個程序員都擁有一座大廠夢,我也不例外,去年面試阿里,竟然被MySQL問倒了,很多相關性的問題都沒有答上來,才2面就涼涼了。為面試做了很多準備,收集很多關於MySQL面試題

MySQL有哪些特性?

  1. 使用C和C++編寫,並使用了多種編譯器進行測試,保證源代碼的可移植性
  2. 支持AIX、FreeBSD、HP-UX、Linux、MacOS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統
  3. 為多種編程語言提供了API。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
  4. 支持多線程,充分利用CPU資源
  5. 化的SQL查詢算法,有效地提高查詢速度
  6. 既能夠作為一個單獨的應用程序應用在客戶端服務器網絡環境中,也能夠作為一個庫而嵌入到其他的軟件中提供多語言支持,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數據表名和數據列名
  7. 提供TCP/IP、ODBC和JDBC等多種數據庫連接途徑
  8. 提供用於管理、檢查、優化數據庫操作的管理工具
  9. 可以處理擁有上千萬條記錄的大型數據庫

走進MySQL的世界

1、MySQL 性能優化的 21 個最佳實踐

  1. 為查詢緩存優化你的查詢
  2. EXPLAIN 你的 SELECT 查詢
  3. 當只要一行數據時使用 LIMIT 1
  4. 為搜索字段建索引
  5. 在 Join 表的時候使用相當類型的例,並將其索引
  6. 千萬不要 ORDER BY RAND()
  7. 避免 SELECT *
  8. 永遠為每張表設置一個 ID
  9. 使用 ENUM 而不是 VARCHAR
  10. 從 PROCEDURE ANALYSE() 取得建議
  11. 儘可能的使用 NOT NULL
  12. Prepared Statements
  13. 無緩衝的查詢
  14. 把 IP 地址存成 UNSIGNED INT
  15. 固定長度的表會更快
  16. 垂直分割
  17. 拆分大的 DELETE 或 INSERT 語句
  18. 越小的列會越快
  19. 選擇正確的存儲引擎
  20. 選擇正確的存儲引擎
  21. 小心“永久鏈接”
太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

2、MySQL面試題總結

之前的阿里面試題都有做總結,具體面試題內容整理成了文檔,本文是針對MySQL系列的,所以下面只展示了自己第一次面試阿里時被吊打問到的一些MySQL難題,下面是今年面試阿里遇到MySQL的題目。

2.1.其他專題內容(含答案)的文檔資料,私信我【面試】即可領取。

  1. 請解釋關係型數據庫概念及主要特點?
  2. 請說出關係型數據庫的典型產品、特點及應用場景?
  3. 請詳細描述 SQL 語句分類及對應代表性關鍵字。
  4. 什麼是 MySQL 多實例,如何配置 MySQL 多實例?
  5. 如何加強 MySQL 安全,請給出可行的具體措施?
  6. 誤操作執行了一個 drop 庫 SQL 語句,如何完整恢復?
  7. 詳述 MySQL 主從複製原理及配置主從的完整步驟。
  8. MySQL 如何實現雙向互為主從複製,並說明應用場景?
  9. MySQL 如何實現級聯同步,並說明應用場景?
  10. MySQL 主從複製故障如何解決?

2.2.MySQL55道面試專題你能答出多少?

  1. 一張表,裡面有 ID 自增主鍵,當 insert 了 17 條記錄之後,刪除了第 15,16,17 條記錄,再把 Mysql 重啟,再 insert 一條記錄,這條記錄的 ID 是 18 還是 15 ?
  2. Mysql 的技術特點是什麼?
  3. Heap表是什麼?
  4. Mysql 服務器默認端口是什麼?
  5. 與 Oracle 相比,Mysql 有什麼優勢?
  6. 如何區分 FLOAT 和 DOUBLE?
  7. 區分 CHAR_LENGTH 和 LENGTH?
  8. 請簡潔描述 Mysql 中 InnoDB 支持的四種事務隔離級別名稱,以及逐級之間的區別?
  9. 在 Mysql 中 ENUM 的用法是什麼?
  10. 如何定義 REGEXP?
  11. CHAR 和 VARCHAR 的區別?
  12. 列的字符串類型可以是什麼?
  13. 如何獲取當前的 Mysql 版本?
  14. Mysql 中使用什麼存儲引擎?
  15. Mysql 驅動程序是什麼?
  16. TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 數據類型上做什麼?
  17. 主鍵和候選鍵有什麼區別?
  18. 如何使用 Unix shell 登錄 Mysql?
  19. myisamchk 是用來做什麼的?
  20. MYSQL 數據庫服務器性能分析的方法命令有哪些?
  21. 如何控制 HEAP 表的最大尺寸?
  22. MyISAM Static 和 MyISAM Dynamic 有什麼區別?
  23. federated 表是什麼?
  24. 如果一個表有一列定義為 TIMESTAMP,將發生什麼?
  25. 列設置為 AUTO INCREMENT 時,如果在表中達到最大值,會發生什麼情況?
  26. 怎樣才能找出最後一次插入時分配了哪個自動增量?
  27. 你怎麼看到為表格定義的所有索引?
  28. LIKE 聲明中的%和_是什麼意思?
  29. 如何在 Unix 和 Mysql 時間戳之間進行轉換?
  30. 列對比運算符是什麼?
  31. 我們如何得到受查詢影響的行數?
  32. Mysql 查詢是否區分大小寫?
  33. LIKE 和 REGEXP 操作有什麼區別?
  34. BLOB 和 TEXT 有什麼區別?
  35. mysql_fetch_array 和 mysql_fetch_object 的區別是什麼?
  36. 我們如何在 mysql 中運行批處理模式?
  37. MyISAM 表格將在哪裡存儲,並且還提供其存儲格式?
  38. Mysql 中有哪些不同的表格?
  39. ISAM 是什麼?
  40. InnoDB 是什麼?
  41. Mysql 如何優化 DISTINCT?
  42. 如何輸入字符為十六進制數字?
  43. 如何顯示前 50 行?
  44. 可以使用多少列創建索引?
  45. NOW()和 CURRENT_DATE()有什麼區別?
  46. 什麼樣的對象可以使用 CREATE 語句創建?
  47. Mysql 表中允許有多少個 TRIGGERS?
  48. 什麼是非標準字符串類型?
  49. 什麼是通用 SQL 函數?
  50. 解釋訪問控制列表
  51. MYSQL 支持事務嗎?
  52. mysql 裡記錄貨幣用什麼字段類型好
  53. MYSQL 數據表在什麼情況下容易損壞?
  54. mysql 有關權限的表都有哪幾個?
  55. Mysql 中有哪幾種鎖?

3、MySQL 性能調優與架構設計

  • 基礎篇:
  1. MySQL基本介紹
  2. MySQL架構組成
  3. MySQL存儲引擎簡介
  4. MySQL安全管理
  5. MySQL備份與恢復
太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

  • 性能優化篇:
  1. 影響MySQLServer性能的相關因素
  2. MySQL數據庫鎖定機制
  3. MySQL數據庫Query的優化
  4. MySQL數據庫Schema設計的性能優化
  5. MySQLServer性能優化
  6. 常用存儲引擎優化
太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

  • 架構設計篇:
  1. MySQL可擴展設計的基本原則
  2. 可擴展性設計之MySQLReplication
  3. 可擴展性設計之數據切分
  4. 可擴展性設計之Cache與Search的..
  5. MySQLCluster
  6. 高可用設計之思路及方案
  7. 高可用設計之MySQL監控

MySQL架構與歷史

太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

和其他數據庫系統相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用併發揮好的作用,但同時也會帶來-點選擇上的困難。MySQL並不完美,卻足夠靈活,能夠適應高要求的環境,例如Web類應用。同時,MySQL既可以嵌入到應用程序中,也可以支持數據倉庫、內容索引和部署軟件、高可用的冗餘系統、在線事務處理系統(OLTP)等各種應用類型。

轉發+關注後留意私信回覆【架構書籍】即可免費領取史上最全MySQL實戰文檔

服務器性能剖析

太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

在我們的技術諮詢生涯中,最常碰到的三個性能相關的服務請求是:如何確認服務器是否達到了性能最佳的狀態、找出某條語句為什麼執行不夠快,以及診斷被用戶描述成“停頓"、“堆積"或者“卡死"的某些間歇性疑難故障。本章將主要針對這三個問題做出解答。我們將提供- - 些工具和技巧來優化整機的性能、優化單條語句的執行速度,以及診斷或者解決那些很難觀察到的問題(這些問題用戶往往很難知道其根源,有時候甚至都很難察覺到它的存在)。

查詢性能優化

太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

前面是介紹瞭如何設計最優的庫表結構、如何建立最好的索引,這些對於高性能來說是必不可少的。但這些還不夠一還需 要合理的設計查詢。如果查詢寫得很糟糕,即使庫表結構再合理、索引再合適,也無法實現高性能。

MySQL高級特性

太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

MySQL從5.0和5.1版本開始引入了很多高級特性,例如分區、觸發器等,這對有其他關係型數據庫使用背景的用戶來說可能並不陌生。這些新特性吸引了很多用戶開始使用MySQL。不過,這些特性的性能到底如何,還需要用戶真正使用過才能知道。這裡我們將為大家介紹,在真實的世界中,這些特性表現如何,而不是隻簡單地介紹參考手冊或者宜傳材料.上的數據。

轉發+關注後留意私信回覆【架構書籍】即可免費領取史上最全MySQL實戰文檔

優化服務器設置

太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

這裡我們將解釋為MySQL服務器創建一個靠譜的配置文件的過程。這是一個很繞的過程,有很多有意思的關注點和值得關注的思路。關注這些點很有必要,因為創建個好配置的最快方法不是從學習配置項開始,也不是從問哪個配置項應該怎麼設置或者怎麼修改開始,更不是從檢查服務器行為和詢問哪個配置項可以提升性能開始。

最好是從理解MySQL內核和行為開始。然後可以利用這些知識來指導配置MySQL.最後,可以將想要的配置和當前配置進行比較,然後糾正重要並且有價值的不同之處。

轉發+關注後留意私信回覆【架構書籍】即可免費領取史上最全MySQL實戰文檔

複製

太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

MySQL內建的複製功能是構建基於MySQL的大規模、高性能應用的基礎,這類應用使用所謂的“水平擴展”的架構。我們可以通過為服務器配置一個或多個備庫生1的方式來進行數據同步。複製功能不僅有利於構建高性能的應用,同時也是高可用性、可擴展性、災難恢復、備份以及數據倉庫等工作的基礎。事實上,可擴展性和高可用性通常是相關聯的話題,我們會在接下來的三章詳細闡述。

轉發+關注後留意私信回覆【架構書籍】即可免費領取史上最全MySQL實戰文檔

可擴展的MySQL

太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

在此將展示如何構建-一個 基於MySQL的應用,並且當規模變得越來越龐大時,還能保證快速、高效並且經濟。有些應用僅僅適用於--臺或少數幾臺服務器,那麼哪些可擴展性建議是和這些應用相關的呢?大多數人從不會維護超大規模的系統,井且通常也無法效仿在主流大公司所使用的策略。本章會涵蓋這- - 系列的策略。我們已經建立或者協助建立了許多應用,包括從單臺或少量服務器的應用到使用上千臺服務器的應用。選擇一個合適的策略能夠大大地節約時間和金錢。MySQL經常被批評很難進行擴展,有些情況下這種看法是正確的,但如果選擇正確的架構並很好地實現,就能夠非常好地擴展MySQL.但是擴展性並不是-一個很好理解的主題,所以我們先來理清- -些容易混淆的地方。

轉發+關注後留意私信回覆【架構書籍】即可免費領取史上最全MySQL實戰文檔

雲端的MySQL

太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

應用層優化

如果在提高MySQL的性能上花費太多時間,容易使視野侷限於MySQL本身,而忽略了用戶體驗。回過頭來看,也許可以意識到,或許MySQL已經足夠優化,對於用戶看到的響應時間而言,其所佔的比重已經非常之小,此時應該關注下其他部分了。這是個很不錯的觀點,尤其是對DBA而言,這是很值得去做的正確的事。但如果不是MySQL,那又是什麼導致了問題呢?使用第3章提到的技術,通過測量可以快速而準確地給出答案。如果能順著應用的邏輯過程從頭到尾來剖析,那麼找到問題的源頭一般來說並不困難。有時,儘管問題在MySQL.上,也很容易在系統的另一部分得到解決。

備份和恢復

如果沒有提前做好備份規劃,也許以後會發現已經錯失了- -些最佳的選擇。例如,在服務器已經配置好以後,才想起應該使用LVM,以便可以獲取文件系統的快照一但這時已經太遲了。在為備份配置系統參數時,可能沒有注意到某些系統配置對性能有著重要影響。如果沒有計劃做定期的恢復演練,當真的需要恢復時,就會發現並沒有那麼順利。

MySQL用戶工具

MySQL服務器發行包中並沒有包含針對許多常用任務的工具,例如監控服務器或比較不同服務器間數據的工具。幸運的是,Oracle 的商業版提供了- -些擴展工具,並且MySQL活躍的開源社區和第三方公司也提供了- -系列的工具,降低了自己“重複發明輪子”的需要。

總目錄

太厲害了!華為大牛終於把MySQL講的明明白白(基礎+優化+架構)

轉發+關注後留意私信回覆【架構書籍】即可免費領取史上最全MySQL實戰文檔


分享到:


相關文章: