1. 程式人生 > 實用技巧 >MySQL 資料庫效能優化,看這篇就夠了

MySQL 資料庫效能優化,看這篇就夠了

無論是運維、開發、測試,還是架構師,資料庫技術是一個必備加薪神器。

而 MySQL 由於免費,而且效能強勁,是目前使用最廣泛的資料庫產品,同時也是入門門檻最低的資料庫產品之一。更重要的是,掌握了 MySQL,會為你以後學習其他資料庫產品打下堅實的基礎。

今天給大家帶來一門 MySQL 資料庫的進階實戰教程,將重點講解 MySQL 的一些高階特性,以及對資料庫查詢的效能優化。學習完本課程的同學會掌握資料庫運維的相關知識,多表聯合查詢,日誌的使用等資料庫的進階知識。

課程地址: MySQL 資料庫進階實戰


下面來學習一下 MySQL 資料庫和資料表的基本操作:

實驗介紹

在本節實驗中,將會學習如何啟動和連線伺服器,如何對資料庫進行操作,如何建立資料表和在表中新增資料,以及如何檢索表中的資料。

知識點

  • MySQL 的安裝與啟動
  • MySQL 的連線與斷開
  • 資料庫的操作
  • 資料表的操作

MySQL 介紹

MySQL 是一個關係型資料庫管理系統,由瑞典 MySQLAB 公司開發,目前屬於 Oracle 公司。MySQL 是最流行的關係型資料庫管理系統,在 Web 應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關係資料庫管理系統)應用軟體之一。

由於配置不同,在安裝 MySQL 的過程中可能會導致一些問題。所以,就不講解安裝過程了。需要在本地安裝的同學,可以在 在 Windows 下安裝 和 在 Linux 下安裝的官方頁面自行安裝。

啟動與連線伺服器

在實驗中使用的 IDE 已經為大家安裝好 MySQL,無需自行安裝。請同學們開啟你們的桌面環境,點選桌面上的 Xfce 終端。

如果覺得終端視窗太小,可以在檢視中設定全屏模式。在編輯中,大家可以根據自己的喜好設定字型大小,背景顏色和程式碼顏色等。

首先啟動伺服器,輸入命令如下所示。

sudo service mysql start

執行結果如下圖所示,說明伺服器啟動成功。

然後連線伺服器,為了連線伺服器,當呼叫 mysql 時,通常需要提供一個 MySQL 使用者名稱並且很可能需要一個密碼。在這裡我們使用 root 使用者連線伺服器(密碼環境設定為空,無需我們輸入密碼),輸入以下命令連線伺服器。

mysql -u root

顯示如下圖,說明伺服器啟動成功。

成功連線伺服器後,可以在 mysql> 提示下輸入 QUIT 或 EXIT 斷開連線。

資料庫的操作

首先建立資料庫,其語法格式為 CREATE DATABASE <資料庫名字>

例如,我們建立一個名為 mysql_test 的資料庫。

CREATE DATABASE mysql_test;

建立後的輸出如下,說明建立成功。

用 SHOW DATABASES 來檢視當前存在的所有資料庫。

SHOW DATABASES;

我們能夠在資料庫表中看到 mysql_test 這個資料庫的名字。

當建立成功後,我們需要讓 USE <資料庫名字> 這個命令執行後,才能夠使用該資料庫。

USE mysql_test

若你不想要這個資料庫了,可以使用 DROP DATABASE <資料庫名字> 來刪除指定資料庫。

例如,刪除剛才建立的名為 mysql_test 的資料庫。

DROP DATABASE mysql_test;

資料表的操作

資料庫就像一個衣櫃,而衣櫃裡的小隔間就像空的資料表,在每個小隔間中放入不同型別的衣物,就像我們在資料表中新增資料。接下來我們就學習一下,如何使用資料表吧。

現在,我們使用 CREATE TABLE <資料表名> 在資料庫中建立資料表。

建立資料表的語法格式如下所示。

CREATE TABLE <表名>(
<欄位名1> <資料型別>(<資料長度>),
<欄位名2> <資料型別>(<資料長度>),
....
<欄位名n> <資料型別>(<資料長度>)
);

例如,我們建立一個名為 gradesystem 的資料庫,我們在該資料庫中,建立名為student 的資料表,表中包括學號 ID、學生姓名、性別資訊。

# 建立名為 student 的資料表,包含 id,stu_name,gender

CREATE TABLE student(id int(10),stu_name char(20),gender char(10));

顯示如下圖所示,說明建立成功。

然後再建立一張名為 mark 的表,表中包含學生 id 、課程名字和分數,為了讓程式碼看起來更加的整潔美觀,您可以分行輸入,如下所示。

# 建立名為 mark 的資料表

CREATE TABLE mark
(
    id int(10), # 學生 id
    name char(20), # 課程名
    grade int(10) # 課程分數
);

建立資料表後,使用 SHOW TABLES 來檢視一下,我們能夠看到剛才建立的兩張資料表的名字。

SHOW TABLES; # 查詢所有資料表

使用 DESCRIBE <資料表名字> 來檢視建立資料表的完整資訊。

例如,我們檢視一下資料表 student 的完整資訊。

DESCRIBE student;

從上圖中我們可以看到剛才建立的三個欄位名,int 和 char 是 MySQL 的兩種資料型別,MySQL 的資料型別有很多,不熟悉的同學,可以看一下 MySQL 的資料型別。

在圖中 Null 全都為 YES,那是因為我們沒有指定列名為非空。若我們指定列名為NOT NULL,則會顯示 NO,如下所示。

到此,我們已經在資料庫中建立了兩張資料表。接著我們需要在表中新增資料。在表中新增資料,有 LOAD DATA 和 INSERT 兩種方式。

  • LOAD DATA 是一次可以新增多條資料,可以把文字檔案中的資料直接載入到資料表中。
  • INSERT 是一次增加一條新的資料。

使用 LOAD DATA 載入資料,語句格式為:

LOAD DATA INFILE '載入資料檔案的路徑' INTO TABLE 表名;

使用 INSERT 語句向表中插入資料,語句格式為:

INSERT INTO 表的名字(欄位名1,欄位名2,欄位名3) VALUES(值1,值2,值3);

例如,我們用 INSERT 語句向 student 和 mark 表中分別新增資料。

在 student 表中插入了四條完整的學生資訊資料,如下所示。

INSERT INTO student(id,stu_name,gender) VALUES(01,'Jack','male');
INSERT INTO student(id,stu_name,gender) VALUES(02,'Candy','male');
INSERT INTO student(id,stu_name,gender) VALUES(01,'Rose','Female');
INSERT INTO student VALUES(04,'Ann','Famale');

值得注意的是,當我們插入的資料不完整時,列名對應位置會顯示為 NULL。我們儘量不要在表格中留有空值,因為空值會降低查詢的效能。我們可以使用數字 0 去代替 NULL,關於空值的處理在後面的實驗中會講解。

插入資料後,我們使用 SELECT 語句來查看錶中的完整資訊。語法格式為:SELECT * FROM <資料表名>

再向 mark 表中插入資料,如下所示。

INSERT INTO mark(id,name,grade) VALUES(01,'C++',90);
INSERT INTO mark VALUES(02,'C++',80);
INSERT INTO mark VALUES(03,'JAVA',90);
INSERT INTO mark VALUES(04,'JAVA',50);

從程式碼中我們可以知道,像名字這樣 CHAR 型別的資料,我們需要用引號去修飾。除了 CHAR 型別,還有 VARCHARTEXTDATETIMEENUM等型別的資料也需要用單引號修飾。

用 SELECT 語句檢視一下資料是否成功新增到資料表中。

資料表的查詢操作

檢索特定行的資料

檢索特定行的資料是通過條件限制去查詢符合設定條件的一行或者多行資料。

我們使用 SELECT * FROM <表名> WHERE <條件> 來查詢特定行的資料。

例如,我們查詢一下在 student 表中,學生姓名為 Ann 的學生資訊。

SELECT * FROM student WHERE stu_name = 'Ann';

檢索特定列的資料

檢索特定列的資料就是通過指定欄位名來查詢表中某些列的資料。我們可以使用SELECT <欄位名> FROM <表名> 來查詢,這裡可以寫入多個列名,用逗號隔開即可。

例如,我們查詢一下在 student 表中,所有學生的姓名。

SELECT stu_name FROM student;

同時檢索特定行和列的資料

同時檢索特定行和列的資料相當於前面兩種的結合體,我們可以使用 SELECT <欄位名> FROM <表名> WHERE <條件> 來同時進行特定行和列的資料選擇。

例如,我們可以查詢一下,在 mark 表中,學生分數小於 90 分的成績。

SELECT grade FROM mark WHERE grade < 90;

排序檢索資料

我們可以對資料進行排序檢索,例如在檢索學生成績時,我們可以對學生成績進行排序,這樣使得查詢結果更加清晰。

使用 OREDER BY <欄位名> 可實現對一列或者多列資料進行排序操作。該排序預設是升序,我們可以在其後新增關鍵字 DESC 變成降序。

例如,對 mark 表中,學生的成績進行排序。

SELECT grade FROM mark ORDER BY grade;

最後,我們可以把不想要的資料表給刪除了。可以使用 DROP TABLE <表名> 來刪除整個表,包括表中的資料和表的結構。

例如,我們將 student 表刪除。

如果想要保留表的結構,只是清空表中的資料,那麼我們可以使用 TRUNCATE TABLE <表名>

還可以使用 DELETE FROM <表名> WHERE <欄位名> 來刪除指定行的資料。

實驗總結

在本節實驗中,我們學習了 MySQL 伺服器的啟動與連線,建立並使用資料庫,建立資料表並在表中新增資料,以及查詢表中資料的一些 SELECT 語句,包括行檢索、列檢索、排序檢索等操作。

後續課程中,你還可以學到:

點選課程連結,學習完整課程內容~