1. 程式人生 > >數據庫優化(一)—— MySQL介紹

數據庫優化(一)—— MySQL介紹

批量 key mysq 記錄 對象 delet tab 註釋 state

目錄

  • MySQL介紹
    • 一、MySQL版本
      • 1、mysql主流版本
      • 2、版本選擇
    • 二、MySQL連接與實例
      • 1、MySQL的C/S結構
      • 2、MySQL實例
    • 三、mysql三層結構
      • 1、連接層(連接上數據庫)
      • 2、SQL層(從哪裏獲取數據)
      • 3、存儲引擎層(獲取數據,結構化成表)
    • 四、MySQL的邏輯結構
      • 1、庫
      • 2、表(二維表)
    • 五、SQL語句
      • 1、類型
      • 2、SQL操作的對象
      • 3、SQL語句之DDL規範
      • 4、SQL語句之DCL規範
      • 5、SQL語句之DML規範
      • 6、SQL語句之DQL規範

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條件中不要出現函數操作

數據庫優化(一)—— MySQL介紹