資料庫優化(一)—— MySQL介紹
目錄
MySQL介紹
一、MySQL版本
1、mysql主流版本
mysql 5.6 5.6.36 5.38 5.6.40
mysql 5.7 5.7.18 5.7.20 5.7.22
2、版本選擇
企業版本選擇:6~12月份的GA版本
二、MySQL連線與例項
1、MySQL的C/S結構
# 兩種連線方法 TCP/IP : 可以連線遠端,也可以本地連線 SOCKET : 連線本地
mysql -uroot -poldboy123 -h 10.0.0.200 -P3306
mysql -uroot -poldboy123 -S /tmp/mysql.sock
2、MySQL例項
例項 = mysqld + 記憶體結構
例項 = mysqld + master thread + N Thread + 記憶體結構
三、mysql三層結構
1、連線層(連線上資料庫)
(1)提供連結協議(TCP,SOCKET)
(2)使用者驗證
(3)提供專用連結執行緒,每登入一個使用者,就會起一個專用的執行緒
2、SQL層(從哪裡獲取資料)
(1)接受上層的命令
(2)語法檢測
(3)語義(什麼型別增刪改查?)、許可權檢測
(4)專用解析器解析SQL,解析成多種執行計劃
(5)優化器:選擇一個代價最低的執行計劃
(6)執行器:按照優化器的選擇,執行SQL語句,得出獲取資料方法
(7)查詢快取:預設是關閉的,一般會使用redis產品替代
(8)記錄日誌:二進位制日誌
3、儲存引擎層(獲取資料,結構化成表)
按照SQL層結論,找相應資料,結構化成表的形式
四、MySQL的邏輯結構
1、庫
儲存資料的地方,包括庫名、屬性
2、表(二維表)
包括元資料(表名,表的屬性,列,記錄)
五、SQL語句
1、型別
DDL資料定義語言
DCL資料 控制語言
DML資料操作語言
DQL資料查詢語言
2、SQL操作的物件
SQL操作的書庫和表
3、SQL語句之DDL規範
(1)庫定義
CREATE DATABASE
SHOW DATABASES
DROP DATABASE
a. 關鍵字大寫,字面量小寫
CREATE DATABASE bbs CHARSET utf8mb4
b. 庫名只能小寫,不能是數字開頭,不能為預留關鍵字
c. 庫名和業務名有關,例如:blog_user
d. 必須加字符集CHARSET utf8mb4
(2)表定義
CREATE TABLE
DROP TABLE
ALTER TABLE
a. 關鍵字大寫(非必須),字面名小寫(必須)
b. 表名必須小寫,不能是數字開頭,不能為預留關鍵字
c. 表名和業務名有關
d. 必須加儲存引擎和字符集
f. 必須有主鍵: PRIMARY KEY
g. 合適的資料型別
h. 必須加註釋:COMMENT '使用者名稱'
i. 儘量避免外來鍵
j. 建立合理的索引
4、SQL語句之DCL規範
grant
revoke
lock
5、SQL語句之DML規範
insert
update
delete
a. insert 語句按批量插入資料
b. update 必須加 where 條件
c. delete 儘量替換為update,如添一個狀態量欄位 state
d. 如果有清空全表的需求,使用 truncate
6、SQL語句之DQL規範
select
show
a. select 語句避免使用select * from t1;
,使用select id,name from t1;
b. select 語句儘量加等值的where條件,select id,name from t1 where age>20;
c. select 語句對於範圍查詢,select 語句對於範圍查詢,例如 :select * from t1 where id>200;
儘量新增 limit
或者 id>200 and id<300 union all id>300 and id<400
d. select 的where 條件,不要使用 <>
like '%name'
not in
not exist
e. 不要出現3表以上的表連線,避免子查詢
f. where條件中不要出現函式操作