【LeetCode】357. Count Numbers with Unique Digits 計算各個位數不同的數字個數(Medium)(JAVA)
MySQL體系結構與管理
一 體系結構
1.1 C/S(客戶端/服務端)模型介紹
|
|
1.2 例項介紹
|
|
1.3 mysqld程式執行原理
1.3.1 mysqld程式結構
|
|
1.3.2 一條SQL語句的執行過程
1.3.2.1 連線層
|
|
1.3.2.2 SQL層 (重點)
|
|
1.3.2.3 儲存引擎層(類似於Linux中的檔案系統)
|
|
1.4 邏輯結構
1.4.1 庫(類似於目錄)
|
|
1.4.2 表(類似於檔案)
|
|
1.5 物理儲存結構引入
1.5.1 庫的物理儲存結構
|
|
1.5.2 表的物理儲存結構
|
|
1.5.3 表的段、區、頁(16k)(瞭解)
|
|
二 基礎管理
2.1 使用者、許可權管理
2.1.1 使用者
作用:
|
|
定義:
|
|
管理操作:
|
|
2.1.2 許可權
針對使用者設定許可權,許可權是使用者的屬性
許可權管理操作:
|
|
常用許可權介紹:
|
|
許可權作用範圍:
|
|
需求1:windows機器的navicat登入到linux中的MySQL,管理員使用者。
|
|
需求2:建立一個應用使用者app使用者,能從windows上登入mysql,並能操作app庫
|
|
2.1.3 開發人員使用者授權流程
|
|
2.1.4 提示:8.0在grant命令新增新特性
|
|
2.1.5 檢視授權
|
|
2.1.6 回收許可權
|
|
2.1.7 本地管理員使用者密碼忘記.
|
|
2.2 連線管理
2.2.1 自帶客戶端命令
mysql 常用引數:
|
|
2.3 多種啟動方式介紹
提示:
|
|
2.4 初始化配置
2.4.0 作用
|
|
2.4.1 初始化配置的方法
|
|
2.4.2 初始配置檔案
初始化配置檔案的預設讀取路徑
|
|
配置檔案的書寫方式:
|
|
2.5 多例項的應用
2.5.1 準備多個目錄
|
|
2.5.2 準備配置檔案
|
|
2.5.3 初始化三套資料
|
|
2.5.4 systemd管理多例項
|
|
2.5.5 授權
|
|
2.5.6 啟動
|
|
2.5.7 驗證多例項
|
|
SQL基礎應用
一 SQL介紹
|
|
二 常用SQL分類
|
|
2.1 客戶端命令
|
|
三 資料型別、表屬性、字符集
3.1 資料型別
3.1.1 作用
|
|
3.1.2 種類
數值型別
|
|
字元型別
image
|
|
時間型別
|
|
二進位制型別
json格式
5.6以後支援
3.2 表屬性
3.2.1 列屬性
|
|
3.2.2 表的屬性
|
|
3.3 字符集和校對規則
3.3.1 字符集(charset)
|
|
3.3.2 校對規則(排序規則,collation)
|
|
四 DDL應用
4.1 資料定義語言
資料定義語言,對庫和表進行操作,操作mysql的物件,即庫和表,對元資料進行操作
4.2 庫定義
4.2.1 建立
4.2.1 建立資料庫
|
|
建庫標準語句
|
|
4.2.2 刪除(生產中禁止使用)
|
|
4.2.3 修改
|
|
4.2.4 查詢庫相關資訊(DQL)
|
|
4.3 表定義
4.3.1 建立
|
|
4.3.2 建表
|
|
建表規範:
|
|
4.3.2 刪除(生產中禁用命令)
|
|
4.3.3 修改
- 在stu表中新增qq列
|
|
- 在sname後加微信列
|
|
- 在id列前加一個新列num
|
|
- 把剛才新增的列都刪掉(危險)
|
|
- 修改sname資料型別的屬性
|
|
- 將sgender 改為 sg 資料型別改為 CHAR 型別(change需要把原來不需要修改的也帶上)
|
|
注意:
在mysql中,DDL語句在對錶進行操作時,是要鎖“元資料表”的,此時,所有修改類的命令無法執行
(元資料:記錄表的各種資訊,對資料鎖定,才能修改,否則都去改,就會出問題)
大表加一列,業務繁忙的表,要謹慎
8.0以前版本需要藉助,可以藉助pt-osc(pt-online-shaema-change),gh-ost工具進行DDL操作
4.3.4 表屬性查詢(DQL)
|
|
五 DCL應用 ****
|
|
六 DML應用
6.1 作用
|
|
6.2 insert
|
|
6.3 update
|
|
6.4 delete(危險!!)
|
|
全表刪除:
|
|
偽刪除:
用update來替代delete,最終保證業務中查不到(select)即可
|
|
七 DQL應用(select )
7.1 單獨使用
|
|
– select 函式();
|
|
預設執行順序
|
|
匯入資料
|
|
7.2 單表子句-from
|
|
例子:
– 查詢city中所有的資料(不要對大表進行操作)
|
|
– 查詢city表中,id和姓名
|
|
7.3 單表子句-where
|
|
7.3.1 where配合等值查詢
例子:
– 查詢中國(CHN)所有城市資訊
|
|
– 查詢北京市的資訊
|
|
– 查詢甘肅省所有城市資訊
|
|
7.3.2 where配合比較操作符(> < >= <= <>)
例子:
– 查詢世界上少於100人的城市
|
|
7.3.3 where配合邏輯運算子(and or )
例子:
– 中國人口數量大於500w
|
|
– 中國或美國城市資訊
|
|
7.3.4 where配合模糊查詢
例子:
– 查詢省的名字前面帶guang開頭的
|
|
7.3.5 where配合in語句
– 中國或美國城市資訊
|
|
7.3.6 where配合between and
例子:
– 查詢世界上人口數量大於100w小於200w的城市資訊
|
|
7.4 group by + 常用聚合函式
7.4.1 作用
|
|
7.4.2 常用聚合函式
|
|
7.4.3 例子:
例子1:統計世界上每個國家的總人口數.
|
|
例子2: 統計中國各個省的總人口數量(練習)
|
|
例子3:統計世界上每個國家的城市數量(練習)
|
|
例子4:統計中國,每個省總人口,城市個數,城市名列表(重點)
|
|
7.5 having
|
|
例子4:統計中國每個省的總人口數,只打印總人口數小於100w
|
|
7.6 order by + limit
7.6.1 作用
|
|
7.6.2 應用案例
- 檢視中國所有的城市,並按人口數進行排序(從大到小)
|
|
- 統計中國各個省的總人口數量,按照總人口從大到小排序
|
|
- 統計中國,每個省的總人口,找出總人口大於500w的,並按總人口從大到小排序,只顯示前三名
|
|
7.7 distinct:去重複
|
|
7.8 聯合查詢- union all
|
|
7.9 join 多表連線查詢
7.9.0 案例準備
按需求建立一下表結構:
|
|
7.9.1 語法
|
|
查詢張三的家庭住址
|
|
7.9.2 例子:
- 查詢一下世界上人口數量小於100人的城市名和國家名
|
|
- 查詢城市shenyang,城市人口,所在國家名(name)及國土面積(SurfaceArea)
|
|
7.9.3 別名
|
|
7.9.4 多表SQL練習題
- 統計zhang3,學習了幾門課
|
|
- 查詢zhang3,學習的課程名稱有哪些?
|
|
- 查詢oldguo老師教的學生名.
|
|
- 查詢oldguo所教課程的平均分數
|
|
4.1 每位老師所教課程的平均分,並按平均分排序
|
|
- 查詢oldguo所教的不及格的學生姓名
|
|
5.1 查詢所有老師所教學生不及格的資訊
|
|
注意:
|
|
7.9.5 綜合練習
|
|
7.9.6 補充
別名
|
|
八 元資料資訊
8.1 邏輯表有關組成部分
|
|
8.2 information_schema.tables檢視
|
|
- 查詢整個資料庫中所有庫和所對應的表資訊
|
|
- 統計所有庫下的表個數
|
|
- 查詢所有innodb引擎的表及所在的庫
|
|
- 統計world資料庫下每張表的磁碟空間佔用
|
|
- 統計所有資料庫的總的磁碟空間佔用
|
|
- 統計每個庫,所有表的個數,表名
|
|
- 統計每個庫佔用空間大小
|
|
- 生成整個資料庫下的所有表的單獨備份語句
|
|
- 107張表,都需要執行以下2條語句
|
|
九 show 命令
|
|
索引及執行計劃
一 索引作用
|
|
二 索引的種類(演算法)
|
|
三 B樹 基於不同的查詢演算法分類介紹
B 樹
B+樹
B*樹
在b+tree基礎上,枝節點也加入了雙向指標(Innodb,使用B*樹)
|
|
四 在功能上的分類
4.1 聚簇索引構建B樹(簇就是區)
4.1.1 前提
|
|
4.1.2 作用
有了聚簇索引,將來插入的資料行,在同一個區內,都會按照id值的順序,有序儲存資料
4.2.3 聚簇索引構建B樹過程
|
|
4.2 輔助索引(S)構建B+樹
4.2.1 前提
|
|
4.2.2 作用
|
|
4.2.3 輔助索引構建B樹過程
|
|
4.4 聚簇索引和輔助索引構成區別
|
|
五 輔助索引細分
|
|
六 關於索引樹的高度受什麼影響
|
|
七 索引的基本管理
7.1 索引建立前
|
|
|
|
7.1 單列普通輔助索引
7.1.1 建立索引,刪除索引
|
|
7.2 覆蓋索引(聯合索引)
|
|
7.3 字首索引
|
|
7.4 唯一索引
|
|
統計city表中,以省的名字為分組,統計組的個數
|
|
7.5 檢視是否走索引
|
|
7.6 是否走索引壓測
|
|
八 執行計劃獲取及分析
8.0 介紹
|
|
8.1 執行計劃獲取
獲取優化器選擇後的執行計劃
|
|
8.2 執行計劃分析
8.2.0 重點關注的資訊
|
|
|
|
8.2.1 type詳解
8.2.1.1 簡介
|
|
8.2.1.2 ALL
|
|
8.2.1.3 index
|
|
8.2.1.4 range
|
|
8.2.1.5 ref
|
|
8.2.1.6 eq_ref
|
|
8.2.1.7 const
|
|
8.2.2 其他欄位解釋
8.2.2.1 possible_keys和key
|
|
8.2.2.2 key_len
|
|
8.2.2.3 rows
|
|
8.2.2.4 extra
|
|
8.2.3 explain(desc)使用場景(面試題)
|
|
九 索引應用規範
|
|
9.1 建立索引的原則(DBA運維規範)
9.1.0 說明
|
|
9.1.1 (必須的) 建表時一定要有主鍵,一般是個無關列
|
|
9.1.2 選擇唯一性索引
|
|
9.1.3(必須的) 為經常需要where 、ORDER BY、GROUP BY,join on等操作的欄位建立索引
|
|
9.1.4 儘量使用字首來索引
|
|
9.1.5 限制索引的數目
|
|
9.1.6 刪除不再使用或者很少使用的索引(percona toolkit)
|
|
9.1.7 大表加索引,要在業務不繁忙期間操作
9.1.8 儘量少在經常更新值的列上建索引
9.1.9 建索引原則
|
|
9.2 不走索引的情況(開發規範)
9.2.1 沒有查詢條件,或者查詢條件沒有建立索引
|
|
9.2.2 查詢結果集是原表中的大部分資料,應該是25%以上。
|
|
9.2.3 索引本身失效,統計資料不真實
|
|
9.2.4 查詢條件使用函式在索引列上,或者對索引列進行運算,運算包括(+,-,*,/,! 等)
|
|
9.2.5 隱式轉換導致索引失效.這一點應當引起重視.也是開發中經常會犯的錯誤.
|
|
9.2.6 <> ,not in 不走索引(輔助索引)
|
|
9.2.7 like “%_” 百分號在最前面不走
|
|
十擴充套件:優化器針對索引的演算法
10.1 mysql索引的自優化-AHI
|
|
10.2 mysql索引的自優化-Change buffer
|
|
以上是(AHI,Change buffer)自優化能力,不需要單獨配置,下面的是優化演算法
|
|
10.3 ICP:索引下推
|
|
沒有ICP的情況
|
|
有ICP的情況
|
|
10.4 MRR-multi range read
|
|
mrr之前
mrr之後
10.5 SNLJ
10.6 BNLJ
10.7 BKA
十一 問題彙總
11.1 怎樣減少回表
11.2 更新資料時,會對索引有影響嗎,資料的變化索引實時更新嗎?
|
|