MySQL爲什麼這麼重要?
MySQL爲什麼這麼重要?是不是一臉問號??
什麼都不要說了,先來看張圖...
在所有數據庫中,MySQL 排在第二,而 NoSQL 中 MongoDB 排在第一,你可能在想是不是有必要把 Oracle 也學習下,彆着急,再看張圖
全球訪問量最大的 20 家網站,他們分別使用了什麼數據庫呢,絕大多數使用 mysql,有兩個完整live.com 和 bing 使用的是 mssql,並不是他們使用不了 mysql,而是他要支持自己的數據庫。
在國外可能挺多使用 mssql 或者 oracle 的,但是在過能,在去 IOE 的大背景下,包括銀行在內的很多傳統公司慢慢都在像 mysql 轉型,不過其中有個老大不掉的公司,中國電力,依然使用 oracle,在十年的時間僅僅在 oracle 的使用上,中國電力就支出 390 幾個億,平均一年30,40 個億,它有錢,如果你所在公司隨隨便便也能拿個幾百個億,那你也用 oracle 吧
回到咱們今天的主題:全網獨家的“MySQL高級知識”集合
前面說了這麼多MySQL的重要性,你應該明白MySQL是真的很重要了吧,那麼既然如此重要,那還不快點來學習學習?
今天給大家帶來的就是【全網獨家的“MySQL高級知識”集合】,這份筆記說巧不巧,也是從朋友那裏摳過來的,純手寫的文檔,很不容易,聽說整理了好幾個月呢,那就一起來康康?
內容挺多的,大概的給大家介紹一下下,需要完整的原文檔 點擊這裏,就是這麼簡單
1.MySQL的重要性
略過...關於MySQL的重要性,早在開篇我就已經說過了,這裏就不提了(其實前面也是嫖的筆記裏的,嘿嘿)
2.MySQL 安裝
- 2.1. 準備工作
- 2.2. 單實例安裝
- 2.3. 多實例安裝
3.Mysql 權限
- 3.1. 最簡單的MySQL權限
- 3.2. 深入研究下 MySQL 權限
- 3.2.1. 用戶標識是什麼
- 3.2.2. 用戶權限所涉及的表
- 3.2.3. Mysql 的角色
- 3.2.3.1. 準備工作
- 3.2.3.2. 創建一個角色
- 3.2.3.3. 創建 2 個開發人員賬號
- 3.2.3.4. 把兩個用戶加到組裏面
- 3.2.3.5. 給角色 dev_role 應該有的權限
- 3.2.3.6. 測試
4.MySql 數據類型
- 4.1. Int 類型
- 4.1.1. 有無符號
- 4.1.2. INT(N)是什麼?
- 4.1.3. 自動增長的面試題
- 4.2. 字符類型
- 4.2.1. 排序規則
- 4.3. 時間類型
- 4.4. JSON 類型
- 4.4.1. JSON 入門
- 4.4.2. JSON 函數
- 4.4.2.1. json_extract 抽取
- 4.4.2.2. JSON_OBJECT 將對象轉爲 json
- 4.4.2.3. json_insert 插入數據
- 4.4.2.4. json_merge 合併數據並返回
- 4.4.2.5. 其他函數
- 4.5. JSON 索引
- 4.6. 作業
4.MySql 數據類型 內容詳情(部分)
5.Mysql 架構
- 5.1. 體系
- 5.1.1. 連接層
- 5.1.2. SQL 處理層
- 5.1.2.1. 緩存
- 5.1.2.2. 解析查詢
- 5.1.2.3. 優化
- 5.2. 邏輯架構
- 5.3. 物理存儲結構
- 5.3.1. 數據庫的數據庫(DataDir)
- 5.3.2. 數據庫
- 5.3.3. 表文件
- 5.3.4. mysql utilities 安裝
5.Mysql 架構 內容詳情(部分)
6.存儲引擎
- 6.1. MyISAM
- 6.1.1. 表壓縮
- 6.1.2. 適用場景
- 6.2. Innodb
- 6.3. CSV
- 6.4. Archive
- 6.5. Memory
- 6.5.1. 特點
- 6.5.2. 與臨時表的區別
- 6.5.3. 使用場景
- 6.6.Ferderated
7.鎖
- 7.1. 鎖的簡介
- 7.1.1. 爲什麼需要鎖?
- 7.1.2. 鎖的概念
- 7.1.3. MySQL 中的鎖
- 7.1.4. 表鎖與行鎖的使用場景
- 7.2. MyISAM 鎖
- 7.2.1. 共享讀鎖
- 7.2.2. 獨佔寫鎖
- 7.2.3. 總結
- 7.3. InnoDB 鎖
- 7.3.1. 語法
- 7.3.2. 注意
- 7.4. 鎖的等待問題
8.事務
- 8.1. 爲什麼需要事務
- 8.2. 什麼存儲引擎支持事務
- 8.3. 事務特性
- 8.3.1. 原子性(atomicity)
- 8.3.2. 一致性(consistency)
- 8.3.3. 持久性(durability)
- 8.3.4. 隔離性(isolation)
- 8.3.4.1. 事務併發問題
- 8.3.4.2. 未提交讀(READ UNCOMMITED)髒讀
- 8.3.4.3. 已提交讀 (READ COMMITED)不可重複讀
- 8.3.4.4. 可重複讀(REPEATABLE READ)
- 8.3.4.5. 可串行化(SERIALIZABLE)
- 8.3.4.6. 間隙鎖(gap 鎖)
- 8.4. 事務語法
- 8.4.1. 開啓事務
- 8.4.2. 事務回滾
- 8.4.3. 事務提交
- 8.4.4. 還原點
9.業務設計
- 9.1. 邏輯設計
- 9.1.1. 範式設計
- 9.1.1.1. 數據庫設計的第一大範式
- 9.1.1.2. 數據庫設計的第二大範式
- 9.1.1.3. 數據庫設計的第三大範式
- 9.1.1.4. 範式設計實戰
- 9.1.1.4.1. 用戶登陸及用戶管理
- 9.1.1.4.2. 商品信息
- 9.1.1.4.3. 供應商管理功能
- 9.1.1.4.4. 在線銷售功能
- 9.1.1.4.5. 表彙總
- 9.1.1.4.6. 查詢練習
- 9.1.2. 反範式設計
- 9.1.2.1. 什麼叫反範式化設計
- 9.1.2.1.1. 商品信息反範式設計
- 9.1.2.1.2. 在線銷售功能反範式
- 9.1.2.1.3. 查詢練習
- 9.1.3. 總結
- 9.1.3.1. 範式化設計優缺點
- 9.1.3.2. 反範式化設計優缺點
- 9.2. 物理設計
- 9.2.1. 命名規範
- 9.2.1.1.1. 數據庫、表、字段的命名要遵守可讀性原則
- 9.2.1.1.2. 數據庫、表、字段的命名要遵守表意性原則
- 9.2.1.1.3. 數據庫、表、字段的命名要遵守長名原則
- 9.2.2. 存儲引擎選擇
- 9.2.3. 數據類型選擇
- 9.2.3.1.1. 浮點類型
- 9.2.3.1.2. 日期類型
10.慢查詢
- 10.1. 什麼是慢查詢
- 10.2. 慢查詢配置
- 10.2.1. 慢查詢基本配置
- 10.2.2. 慢查詢解讀
- 10.3. 慢查詢分析
- 10.3.1. Mysqldumpslow
- 10.3.2. pt_query_digest
- 10.3.2.1. 擴展閱讀
- 10.3.2.1.1. 語法及重要選項
- 10.3.2.1.2. 分析 pt-query-digest 輸出結果
- 10.3.2.1.2.1.第一部分:總體統計結果
- 10.3.2.1.2.2.第二部分:查詢分組統計結果
- 10.3.2.1.2.3.第三部分:每一種查詢的詳細統計結果
11.索引與執行計劃
- 11.1. 索引入門
- 11.1.1. 索引是什麼
- 11.1.1.1. 生活中的索引
- 11.1.1.2. MySql 中的索引
- 11.1.1.3. 談下 B+Tree
- 11.1.1.3.1. 二分查找
- 11.1.1.3.2. 二叉樹(Binary Tree)
- 11.1.1.3.3. 平衡二叉樹(AVL-樹)
- 11.1.1.3.3.1. 平衡二叉樹的遍歷
- 11.1.1.3.3.2. 平衡二叉樹的旋轉
- 11.1.1.3.4. B+樹
- 11.1.1.3.4.1. B+樹的定義
- 11.1.1.3.4.2. B+樹的作用
- 11.1.1.3.4.3. B+樹的扇出(fan out)
- 11.1.1.3.4.4. B+樹的插入操作
- 11.1.2. 索引的分類
- 11.1.3. 基礎語法
- 11.2. 執行計劃
- 11.2.1. 什麼是執行計劃
- 11.2.2. 執行計劃的作用
- 11.2.3. 執行計劃的語法
- 11.2.4. 執行計劃詳解
- 11.2.4.1. ID 列
- 11.2.4.1.1.Id 相同
- 11.2.4.1.2.Id 不同
- 11.2.4.1.3.Id 相同又不同
- 11.2.4.2. select_type 列
- 11.2.4.2.1. SIMPLE
- 11.2.4.2.2.PRIMARY 與 SUBQUERY
- 11.2.4.2.3.DERIVED
- 11.2.4.2.4.UNION RESULT 與 UNION
- 11.2.4.3. table 列
- 11.2.4.4. Type 列
- 11.2.4.4.1. System 與 const
- 11.2.4.4.2. eq_ref
- 11.2.4.4.3.Ref
- 11.2.4.4.4.Range
- 11.2.4.4.5.Index
- 11.2.4.4.6.All
- 11.2.4.5. possible_keys 與 Key
- 11.2.4.6. key_len
- 11.2.4.6.1. 字符類型
- 11.2.4.6.1.1.字符類型-索引字段爲 char 類型+不可爲 Null 時
- 11.2.4.6.1.2.字符類型-索引字段爲 char 類型+允許爲 Null 時
- 11.2.4.6.1.3.索引字段爲 varchar 類型+不可爲 Null 時
- 11.2.4.6.1.4.索引字段爲 varchar 類型+允許爲 Null 時
- 11.2.4.6.2. 數值類型
- 11.2.4.6.3. 日期和時間
- 11.2.4.6.4. 總結
- 11.2.4.6.4.1. 字符類型
- 11.2.4.6.4.2. 整數/浮點數/時間類型的索引長度
- 11.2.4.7. Ref
- 11.2.4.8. Rows
- 11.2.4.9. Extra
- 11.2.4.9.1. Using filesort
- 11.2.4.9.2. Using temporary
- 11.2.4.9.3. Using index
- 11.2.4.9.3.1.覆蓋索引
- 11.2.4.9.4.Using where 與 using join buffer
- 11.2.4.9.5.impossible where
11.索引與執行計劃 內容詳情(部分)
12.SQL 優化
- 12.1. 優化實戰
- 12.1.1. 策略 1.儘量全值匹配
- 12.1.2. 策略 2.最佳左前綴法則
- 12.1.3. 策略 3.不在索引列上做任何操作
- 12.1.4. 策略 4.範圍條件放最後
- 12.1.5. 策略 5.覆蓋索引儘量用
- 12.1.6. 策略 6.不等於要慎用
- 12.1.7. 策略 7.Null/Not 有影響
- 12.1.7.1. 自定定義爲 NOT NULL
- 12.1.7.2. 自定義爲 NULL 或者不定義
- 12.1.8. 策略 8.Like 查詢要當心
- 12.1.9. 策略 9.字符類型加引號
- 12.1.10. 策略 10.OR 改 UNION 效率高
- 12.1.11. 測試題
- 12.2. 批量導入
- 12.2.1. insert 語句優化
- 12.2.2. LOAD DATA INFLIE
以上差不多就是這整份“MySQL高級知識”的大概內容,既然已經談到MySQL了,那就接着來看看MySQL調優與面試吧..
阿里P8MySQL面試必備哪些知識點?
都在這兒呢(解析),64頁...
先從基礎開始?(抽取30道)
- 18.如果把一個 InnoDB 表的主鍵刪掉,是不是就沒有主鍵,就沒辦法進行回表查詢了?
- 19.執行一個 update 語句以後,我再去執行 hexdump 命令直接查看 ibd 文件內容,爲什麼沒有看到數據有改變呢?
- 20.內存表和臨時表有什麼區別?
- 21.併發事務會帶來哪些問題?
- 22.什麼是髒讀和幻讀?
- 23.爲什麼會出現幻讀?幻讀會帶來什麼問題?
- 24.如何避免幻讀?
- 25.如何查看 MySQL 的空閒連接?
- 26.MySQL 中的字符串類型都有哪些?
- 27.VARCHAR 和 CHAR 的區別是什麼?分別適用的場景有哪些?
- 28.MySQL 存儲金額應該使用哪種數據類型?爲什麼?
- 29.limit 3,2 的含義是什麼?
- 30.now() 和 current_date() 有什麼區別?
- 31.如何去重計算總條數?
- 32.lastinsertid() 函數功能是什麼?有什麼特點?
- 33.刪除表的數據有幾種方式?它們有什麼區別?
- 34.MySQL 中支持幾種模糊查詢?它們有什麼區別?
- 35.MySQL 支持枚舉嗎?如何實現?它的用途是什麼?
- 36.count(column) 和 count(*) 有什麼區別?
- 37.以下關於 count 說法正確的是?
- 38.爲什麼 InnoDB 不把總條數記錄下來,查詢的時候直接返回呢?
- 39.能否使用 show table status 中的錶行數作爲表的總行數直接使用?爲什麼?
- 40.以下哪個 SQL 的查詢性能最高?
- 41.InnoDB 和 MyISAM 執行 select count(*) from t,哪個效率更高?爲什麼?
- 42.在 MySQL 中有對 count(*) 做優化嗎?做了哪些優化?
- 43.在 InnoDB 引擎中 count(*)、count(1)、count(主鍵)、count(字段) 哪個性能最高?
- 44.MySQL 中內連接、左連接、右連接有什麼區別?
- 45.什麼是視圖?如何創建視圖?
- 46.視圖有哪些優點?
- 47.MySQL 中“視圖”的概念有幾個?分別代表什麼含義?
索引(抽取30道)
- 6.索引有幾種類型?分別如何創建?
- 7.主索引和唯一索引有什麼區別?
- 8.在 InnDB 中主鍵索引爲什麼比普通索引的查詢性能高?
- 9.什麼叫回表查詢?
- 10.如何查詢一張表的所有索引?
- 11.MySQL 最多可以創建多少個索引列?
- 12.以下 like 查詢會使用索引的是哪一個選項?爲什麼?
- 13.如何讓 like %abc 走索引查詢?
- 14.MySQL 聯合索引應該注意什麼?
- 15.聯合索引的作用是什麼?
- 16.什麼是最左匹配原則?它的生效原則有哪些?
- 17.列值爲 NULL 時,查詢會使用到索引嗎?
- 18.以下語句會走索引麼?
- 19.能否給手機號的前 6 位創建索引?如何創建?
- 20.什麼是前綴索引?
- 21.爲什麼要用前綴索引?
- 22.什麼情況下適合使用前綴索引?
- 23.什麼是頁?
- 24.索引的常見存儲算法有哪些?
- 25.InnoDB 爲什麼要使用 B+ 樹,而不是 B 樹、Hash、紅黑樹或二叉樹?
- 26.爲什麼 InnoDB 要使用 B+ 樹來存儲索引?
- 27.唯一索引和普通索引哪個性能更好?
- 28.優化器選擇查詢索引的影響因素有哪些?
- 29.MySQL 是如何判斷索引掃描行數的多少?
- 30.MySQL 是如何得到索引基數的?它準確嗎?
- 31.MySQL 如何指定查詢的索引?
- 32.在 MySQL 中指定了查詢索引,爲什麼沒有生效?
- 33.以下 or 查詢有什麼問題嗎?該如何優化?
- 34.以下查詢要如何優化?
- 35.MySQL 會錯選索引嗎?
- 36.如何解決 MySQL 錯選索引的問題?
鎖(20道)
鎖(20道)
日誌問題(抽個30道)
- 11.MySQL 怎麼知道 binlog 是完整的?
- 12.MySQL 中可不可以只要 binlog,不要 redo log?
- 13.MySQL 中可不可以只要 redo log,不要 binlog?
- 14.爲什麼 binlog cache 是每個線程自己維護的,而 redo log buffer 是全局共用的?
- 15.事務執行期間,還未提交,如果發生 crash,redo log 丟失,會導致主備不一致呢?
- 16.在 MySQL 中用什麼機制來優化隨機讀/寫磁盤對 IO 的消耗?
- 17.以下說法錯誤的是?
- 18.以下說法正確的是?
- 19.有沒有辦法把 MySQL 的數據恢復到過去某個指定的時間節點?怎麼恢復?
- 20.MySQL命令和內置函數篇
- 21.如何用命令行方式連接 MySQL 數據庫?
- 22.關於命令 mysql -h 127.0.0.1 -uroot -P 3307 -p3307 以下說法錯誤的是?
- 23.如何創建用戶?並給用戶授權?
- 24.如何修改 MySQL 密碼?
- 25.如何使用 SQL 創建數據庫,並設置數據庫的編碼格式?
- 26.如何修改數據庫、表的編碼格式?
- 27.如何使用 SQL 創建表?
- 28.在 MySQL 命令行中如何查看錶結構信息?
- 29.如何使用 SQL 查看已知表的建表腳本?
- 30.如何使用 SQL 語句更新表結構?
- 31.MySQL 有哪些刪除方式?有什麼區別?
- 32.如何開啓和關閉 MySQL 服務?
- 33.如何查詢當前 MySQL 安裝的版本號?
- 34.如何查看某張表的存儲引擎?
- 35.如何查看當前數據庫增刪改查的執行次數統計?
- 36.如何查詢線程連接數?
- 37.如何查看 MySQL 的最大連接數?能不能修改?怎麼修改?
- 38.CHAR_LENGTH 和 LENGTH 有什麼區別?
- 39.UNION 和 UNION ALL 的用途是什麼?有什麼區別?
- 40.以下關於 WHERE 和 HAVING 說法正確的是?
調優問題(7道)
最後:MySQL性能調優與架構設計--全冊
- 基礎篇
- 第1節:MySQL基本介紹
- 第2節:MySQL架構組成
- 第3節:MySQL存儲引擎簡介
- 第4節:MySQL安全管理
- 第5節:MySQL備份與恢復
- 性能優化篇
- 第6節:影響MySQLServer性能的相關因素
- 第7節:MySQL 數據庫鎖定機制
- 第8節:MySQL 數據庫Query 的優化
- 第9節:MySQL 數據庫Schema 設計的性能優化
- 第10節:MySQL Server 性能優化
- 第11節:常用存儲引擎優化
- 架構設計篇
- 第12節:MySQL 可擴展設計的基本原則
- 第13節:可擴展性設計之MySQL Replication
- 第14節:可擴展性設計之數據切分
- 第15節:可擴展性設計之Cache 與Search 的利用
- 第16節:MySQL Cluster
- 第17節:高可用設計之思路及方案
- 第18節:高可用設計之MySQL 監控
MySQL就嘮嗑到這兒啦,以上所提及的全部MySQL知識筆記,不管是[mysql高級知識筆記],還是[阿里P8MySQL][MySQL性能調優與架構設計--全冊]等等,都可提供完整的源文件喲
更多關於Java集合、JVM、多線程併發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java算法、數據庫、Zookeeper、分佈式緩存、數據結構面試解析+知識點集合等等可以去這個Github鏈接地址:
https://github.com/ThinkingHan/Java-note 閱讀,Star一下吧,感謝支持~