日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL 数据库性能优化,看这篇就够了

發(fā)布時(shí)間:2024/4/14 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 数据库性能优化,看这篇就够了 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

無論是運(yùn)維、開發(fā)、測(cè)試,還是架構(gòu)師,數(shù)據(jù)庫技術(shù)是一個(gè)必備加薪神器。

而 MySQL 由于免費(fèi),而且性能強(qiáng)勁,是目前使用最廣泛的數(shù)據(jù)庫產(chǎn)品,同時(shí)也是入門門檻最低的數(shù)據(jù)庫產(chǎn)品之一。更重要的是,掌握了 MySQL,會(huì)為你以后學(xué)習(xí)其他數(shù)據(jù)庫產(chǎn)品打下堅(jiān)實(shí)的基礎(chǔ)。

今天給大家?guī)硪婚T?MySQL 數(shù)據(jù)庫的進(jìn)階實(shí)戰(zhàn)教程,將重點(diǎn)講解?MySQL 的一些高級(jí)特性,以及對(duì)數(shù)據(jù)庫查詢的性能優(yōu)化。學(xué)習(xí)完本課程的同學(xué)會(huì)掌握數(shù)據(jù)庫運(yùn)維的相關(guān)知識(shí),多表聯(lián)合查詢,日志的使用等數(shù)據(jù)庫的進(jìn)階知識(shí)。

課程地址: MySQL 數(shù)據(jù)庫進(jìn)階實(shí)戰(zhàn)


下面來學(xué)習(xí)一下?MySQL 數(shù)據(jù)庫和數(shù)據(jù)表的基本操作:

實(shí)驗(yàn)介紹

在本節(jié)實(shí)驗(yàn)中,將會(huì)學(xué)習(xí)如何啟動(dòng)和連接服務(wù)器,如何對(duì)數(shù)據(jù)庫進(jìn)行操作,如何創(chuàng)建數(shù)據(jù)表和在表中添加數(shù)據(jù),以及如何檢索表中的數(shù)據(jù)。

知識(shí)點(diǎn)

  • MySQL 的安裝與啟動(dòng)
  • MySQL 的連接與斷開
  • 數(shù)據(jù)庫的操作
  • 數(shù)據(jù)表的操作

MySQL 介紹

MySQL 是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典 MySQLAB 公司開發(fā),目前屬于 Oracle 公司。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在 Web 應(yīng)用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。

由于配置不同,在安裝 MySQL 的過程中可能會(huì)導(dǎo)致一些問題。所以,就不講解安裝過程了。需要在本地安裝的同學(xué),可以在?在 Windows 下安裝?和?在 Linux 下安裝的官方頁面自行安裝。

啟動(dòng)與連接服務(wù)器

在實(shí)驗(yàn)中使用的 IDE 已經(jīng)為大家安裝好 MySQL,無需自行安裝。請(qǐng)同學(xué)們打開你們的桌面環(huán)境,點(diǎn)擊桌面上的 Xfce 終端。

如果覺得終端窗口太小,可以在視圖中設(shè)置全屏模式。在編輯中,大家可以根據(jù)自己的喜好設(shè)置字體大小,背景顏色和代碼顏色等。

首先啟動(dòng)服務(wù)器,輸入命令如下所示。

sudo service mysql start

運(yùn)行結(jié)果如下圖所示,說明服務(wù)器啟動(dòng)成功。

然后連接服務(wù)器,為了連接服務(wù)器,當(dāng)調(diào)用 mysql 時(shí),通常需要提供一個(gè) MySQL 用戶名并且很可能需要一個(gè)密碼。在這里我們使用?root?用戶連接服務(wù)器(密碼環(huán)境設(shè)置為空,無需我們輸入密碼),輸入以下命令連接服務(wù)器。

mysql -u root

顯示如下圖,說明服務(wù)器啟動(dòng)成功。

成功連接服務(wù)器后,可以在?mysql>?提示下輸入?QUIT?或?EXIT?斷開連接。

數(shù)據(jù)庫的操作

首先創(chuàng)建數(shù)據(jù)庫,其語法格式為?CREATE DATABASE <數(shù)據(jù)庫名字>。

例如,我們創(chuàng)建一個(gè)名為?mysql_test?的數(shù)據(jù)庫。

CREATE DATABASE mysql_test;

創(chuàng)建后的輸出如下,說明創(chuàng)建成功。

用?SHOW DATABASES?來查看當(dāng)前存在的所有數(shù)據(jù)庫。

SHOW DATABASES;

我們能夠在數(shù)據(jù)庫表中看到?mysql_test?這個(gè)數(shù)據(jù)庫的名字。

當(dāng)創(chuàng)建成功后,我們需要讓?USE <數(shù)據(jù)庫名字>?這個(gè)命令執(zhí)行后,才能夠使用該數(shù)據(jù)庫。

USE mysql_test

若你不想要這個(gè)數(shù)據(jù)庫了,可以使用?DROP DATABASE <數(shù)據(jù)庫名字>?來刪除指定數(shù)據(jù)庫。

例如,刪除剛才創(chuàng)建的名為?mysql_test?的數(shù)據(jù)庫。

DROP DATABASE mysql_test;

數(shù)據(jù)表的操作

數(shù)據(jù)庫就像一個(gè)衣柜,而衣柜里的小隔間就像空的數(shù)據(jù)表,在每個(gè)小隔間中放入不同類型的衣物,就像我們?cè)跀?shù)據(jù)表中添加數(shù)據(jù)。接下來我們就學(xué)習(xí)一下,如何使用數(shù)據(jù)表吧。

現(xiàn)在,我們使用?CREATE TABLE <數(shù)據(jù)表名>?在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表。

創(chuàng)建數(shù)據(jù)表的語法格式如下所示。

CREATE TABLE <表名>( <字段名1> <數(shù)據(jù)類型>(<數(shù)據(jù)長度>), <字段名2> <數(shù)據(jù)類型>(<數(shù)據(jù)長度>), .... <字段名n> <數(shù)據(jù)類型>(<數(shù)據(jù)長度>) );

例如,我們創(chuàng)建一個(gè)名為?gradesystem?的數(shù)據(jù)庫,我們?cè)谠摂?shù)據(jù)庫中,創(chuàng)建名為student?的數(shù)據(jù)表,表中包括學(xué)號(hào) ID、學(xué)生姓名、性別信息。

# 創(chuàng)建名為 student 的數(shù)據(jù)表,包含 id,stu_name,genderCREATE TABLE student(id int(10),stu_name char(20),gender char(10));

顯示如下圖所示,說明創(chuàng)建成功。

然后再創(chuàng)建一張名為?mark?的表,表中包含學(xué)生 id 、課程名字和分?jǐn)?shù),為了讓代碼看起來更加的整潔美觀,您可以分行輸入,如下所示。

# 創(chuàng)建名為 mark 的數(shù)據(jù)表CREATE TABLE mark (id int(10), # 學(xué)生 idname char(20), # 課程名grade int(10) # 課程分?jǐn)?shù) );

創(chuàng)建數(shù)據(jù)表后,使用?SHOW TABLES?來查看一下,我們能夠看到剛才創(chuàng)建的兩張數(shù)據(jù)表的名字。

SHOW TABLES; # 查詢所有數(shù)據(jù)表

使用?DESCRIBE <數(shù)據(jù)表名字>?來查看創(chuàng)建數(shù)據(jù)表的完整信息。

例如,我們查看一下數(shù)據(jù)表?student?的完整信息。

DESCRIBE student;

從上圖中我們可以看到剛才創(chuàng)建的三個(gè)字段名,int 和 char 是 MySQL 的兩種數(shù)據(jù)類型,MySQL 的數(shù)據(jù)類型有很多,不熟悉的同學(xué),可以看一下 MySQL 的數(shù)據(jù)類型。

在圖中 Null 全都為 YES,那是因?yàn)槲覀儧]有指定列名為非空。若我們指定列名為NOT NULL,則會(huì)顯示 NO,如下所示。

到此,我們已經(jīng)在數(shù)據(jù)庫中建立了兩張數(shù)據(jù)表。接著我們需要在表中添加數(shù)據(jù)。在表中添加數(shù)據(jù),有?LOAD DATA?和?INSERT?兩種方式。

  • LOAD DATA?是一次可以添加多條數(shù)據(jù),可以把文本文件中的數(shù)據(jù)直接加載到數(shù)據(jù)表中。
  • INSERT?是一次增加一條新的數(shù)據(jù)。

使用?LOAD DATA?加載數(shù)據(jù),語句格式為:

LOAD DATA INFILE '加載數(shù)據(jù)文件的路徑' INTO TABLE 表名;

使用?INSERT?語句向表中插入數(shù)據(jù),語句格式為:

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

例如,我們用?INSERT?語句向?student?和?mark?表中分別添加數(shù)據(jù)。

在?student?表中插入了四條完整的學(xué)生信息數(shù)據(jù),如下所示。

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');

值得注意的是,當(dāng)我們插入的數(shù)據(jù)不完整時(shí),列名對(duì)應(yīng)位置會(huì)顯示為 NULL。我們盡量不要在表格中留有空值,因?yàn)榭罩禃?huì)降低查詢的性能。我們可以使用數(shù)字 0 去代替 NULL,關(guān)于空值的處理在后面的實(shí)驗(yàn)中會(huì)講解。

插入數(shù)據(jù)后,我們使用?SELECT?語句來查看表中的完整信息。語法格式為:SELECT * FROM <數(shù)據(jù)表名>。

再向?mark?表中插入數(shù)據(jù),如下所示。

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?類型的數(shù)據(jù),我們需要用引號(hào)去修飾。除了 CHAR 類型,還有?VARCHAR,TEXT,DATE,TIME,ENUM等類型的數(shù)據(jù)也需要用單引號(hào)修飾。

用 SELECT 語句查看一下數(shù)據(jù)是否成功添加到數(shù)據(jù)表中。

數(shù)據(jù)表的查詢操作

檢索特定行的數(shù)據(jù)

檢索特定行的數(shù)據(jù)是通過條件限制去查詢符合設(shè)定條件的一行或者多行數(shù)據(jù)。

我們使用?SELECT * FROM <表名> WHERE <條件>?來查詢特定行的數(shù)據(jù)。

例如,我們查詢一下在?student?表中,學(xué)生姓名為?Ann?的學(xué)生信息。

SELECT * FROM student WHERE stu_name = 'Ann';

檢索特定列的數(shù)據(jù)

檢索特定列的數(shù)據(jù)就是通過指定字段名來查詢表中某些列的數(shù)據(jù)。我們可以使用SELECT <字段名> FROM <表名>?來查詢,這里可以寫入多個(gè)列名,用逗號(hào)隔開即可。

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

SELECT stu_name FROM student;

同時(shí)檢索特定行和列的數(shù)據(jù)

同時(shí)檢索特定行和列的數(shù)據(jù)相當(dāng)于前面兩種的結(jié)合體,我們可以使用?SELECT <字段名> FROM <表名> WHERE <條件>?來同時(shí)進(jìn)行特定行和列的數(shù)據(jù)選擇。

例如,我們可以查詢一下,在?mark?表中,學(xué)生分?jǐn)?shù)小于 90 分的成績。

SELECT grade FROM mark WHERE grade < 90;

排序檢索數(shù)據(jù)

我們可以對(duì)數(shù)據(jù)進(jìn)行排序檢索,例如在檢索學(xué)生成績時(shí),我們可以對(duì)學(xué)生成績進(jìn)行排序,這樣使得查詢結(jié)果更加清晰。

使用?OREDER BY <字段名>?可實(shí)現(xiàn)對(duì)一列或者多列數(shù)據(jù)進(jìn)行排序操作。該排序默認(rèn)是升序,我們可以在其后添加關(guān)鍵字?DESC?變成降序。

例如,對(duì)?mark?表中,學(xué)生的成績進(jìn)行排序。

SELECT grade FROM mark ORDER BY grade;

最后,我們可以把不想要的數(shù)據(jù)表給刪除了??梢允褂?DROP TABLE <表名>?來刪除整個(gè)表,包括表中的數(shù)據(jù)和表的結(jié)構(gòu)。

例如,我們將?student?表刪除。

如果想要保留表的結(jié)構(gòu),只是清空表中的數(shù)據(jù),那么我們可以使用?TRUNCATE TABLE <表名>。

還可以使用?DELETE FROM <表名> WHERE <字段名>?來刪除指定行的數(shù)據(jù)。

實(shí)驗(yàn)總結(jié)

在本節(jié)實(shí)驗(yàn)中,我們學(xué)習(xí)了 MySQL 服務(wù)器的啟動(dòng)與連接,創(chuàng)建并使用數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)表并在表中添加數(shù)據(jù),以及查詢表中數(shù)據(jù)的一些 SELECT 語句,包括行檢索、列檢索、排序檢索等操作。

后續(xù)課程中,你還可以學(xué)到:

點(diǎn)擊課程鏈接,學(xué)習(xí)完整課程內(nèi)容~

總結(jié)

以上是生活随笔為你收集整理的MySQL 数据库性能优化,看这篇就够了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。