国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MySQL速通篇004】這可能最詳細(xì)的關(guān)于MySQL基礎(chǔ)知識(shí)點(diǎn)的文章了

這篇具有很好參考價(jià)值的文章主要介紹了【MySQL速通篇004】這可能最詳細(xì)的關(guān)于MySQL基礎(chǔ)知識(shí)點(diǎn)的文章了。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

??前言

?

??頁(yè)CSDN丨博客園

??學(xué)習(xí)流:在下周周ovoの社區(qū)

??這篇8000多字的博客也是花了我比較久的時(shí)間,基本覆蓋很大一部分的MySQL知識(shí)點(diǎn),可以說(shuō)是非常的詳細(xì),感謝各位的支持,對(duì)于文章中的一些語(yǔ)法,概念,例子等錯(cuò)誤,歡迎并感謝各位讀者的指出

【MySQL速通篇004】這可能最詳細(xì)的關(guān)于MySQL基礎(chǔ)知識(shí)點(diǎn)的文章了

【MySQL速通篇004】這可能最詳細(xì)的關(guān)于MySQL基礎(chǔ)知識(shí)點(diǎn)的文章了

??前言

???一、索引種類

??1.1、普通索引

??1.2、主鍵索引

??1.3、唯一索引

??1.4、聯(lián)合索引(包括聯(lián)合唯一索引)

??1.5、覆蓋索引

??1.6、索引合并

??1.7、刪除索引

??二、索引實(shí)現(xiàn)方式

??2.1、hash索引

??2.2、btree索引

??2.3、創(chuàng)建索引的不利方面

??三、無(wú)法命中索引情況

??3.1、模糊查詢

??3.2、組合索引的最左前綴匹配

??3.3、使用了函數(shù)或表達(dá)式

??3.4、列類型不匹配【隱式查詢】

??3.5、or的錯(cuò)誤使用

??3.6、其他的情況

??四、執(zhí)行計(jì)劃

??4.1、概念

4.2、創(chuàng)建方法

??4.3、表的訪問(wèn)方式

??4.4、索引的使用

??4.5、 SQL 的優(yōu)化

??五、慢日志記錄

??5.1、作用

??5.2、查詢

??5.3、詳細(xì)步驟


【MySQL速通篇004】這可能最詳細(xì)的關(guān)于MySQL基礎(chǔ)知識(shí)點(diǎn)的文章了

???一、索引種類

??1.1、普通索引

create index index_name on table(column);

作用:

加速查找

??1.2、主鍵索引

一般是在建表時(shí)指定primary key(column)

作用:

加速查找,不能重復(fù),不能為空

主鍵索引是數(shù)據(jù)庫(kù)中的一種索引類型,它用于唯一標(biāo)識(shí)每個(gè)表中的記錄。主鍵索引通常由一個(gè)或多個(gè)列組成,這些列具有唯一性和非空性約束,因此可以確保表中每個(gè)記錄都有唯一的標(biāo)識(shí)。

在數(shù)據(jù)庫(kù)中,主鍵索引的作用是提高數(shù)據(jù)查詢和檢索的效率。如果沒有主鍵索引,查詢數(shù)據(jù)庫(kù)中的記錄需要逐個(gè)掃描整個(gè)表,這樣會(huì)導(dǎo)致查詢時(shí)間變得極其緩慢。而使用主鍵索引,數(shù)據(jù)庫(kù)可以快速定位到特定的記錄,大大提高了查詢效率和速度。

在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),選擇合適的列作為主鍵索引非常重要。通常情況下,主鍵應(yīng)該是短小、簡(jiǎn)單且穩(wěn)定的,并且不應(yīng)該隨著時(shí)間而改變。同時(shí),為了最大程度地提高查詢效率,主鍵列的數(shù)據(jù)類型應(yīng)該盡可能小,以便在查詢時(shí)占用更少的存儲(chǔ)空間。

雖然主鍵索引可以顯著提高數(shù)據(jù)庫(kù)查詢性能,但在某些情況下也會(huì)帶來(lái)額外的開銷。例如,在更新主鍵列值或插入新記錄時(shí),主鍵索引需要更新索引結(jié)構(gòu),這可能會(huì)導(dǎo)致性能損失。因此,在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),需要綜合考慮數(shù)據(jù)的訪問(wèn)模式、數(shù)據(jù)量、應(yīng)用程序需求等因素來(lái)決定是否需要使用主鍵索引。

??1.3、唯一索引

create unique index index_name on table(column);

或者創(chuàng)建表時(shí)指定unique index_name column

作用:

加速查找,與主鍵類似,但是可以為空,不能重復(fù)

??1.4、聯(lián)合索引(包括聯(lián)合唯一索引)

在多個(gè)字段(列)上創(chuàng)建索引(也就是由多列組成索引),遵循最左前綴原則

alter table t add index index_name(a,b,c);

作用:

加速查找。聯(lián)合索引可以有(聯(lián)合主鍵索引,聯(lián)合唯一索引,聯(lián)合普通索引)當(dāng)然括號(hào)內(nèi)的叫法有些不是很官方

??1.5、覆蓋索引

表中的id和email列創(chuàng)建了索引

【MySQL速通篇004】這可能最詳細(xì)的關(guān)于MySQL基礎(chǔ)知識(shí)點(diǎn)的文章了

select email from info_test where email = 'BIN11@qq.com'
覆蓋索引(Covering Index)是指,當(dāng)數(shù)據(jù)庫(kù)查詢語(yǔ)句可以完全從索引中獲取所需的數(shù)據(jù)結(jié)果時(shí),就稱為使用了覆蓋索引。

通常來(lái)說(shuō),對(duì)于一個(gè)包含多個(gè)列的表,在執(zhí)行查詢操作時(shí),需要搜索整個(gè)表,并根據(jù)查詢條件過(guò)濾出符合條件的記錄。這種搜索可能會(huì)非常耗時(shí),特別是在處理大量數(shù)據(jù)時(shí)。

而如果使用了覆蓋索引,即建立一個(gè)包含所有需要返回結(jié)果列的復(fù)合索引,那么查詢操作只需要在這個(gè)索引上進(jìn)行,而不用再去搜索整個(gè)表。這樣可以極大地提高查詢速度和性能。

使用覆蓋索引的好處不僅在于它減少了查詢操作所需的時(shí)間,還減輕了系統(tǒng)I/O的負(fù)擔(dān)。因?yàn)樗饕ǔ1缺硇〉枚?,所以一旦找到了匹配的索引值,就可以直接從磁盤讀取索引所包含的所有列,而無(wú)需再訪問(wèn)原始數(shù)據(jù)表,從而節(jié)省了大量的磁盤I/O操作。

需要注意的是,覆蓋索引只有在查詢的 SELECT 列都在索引中時(shí)才能發(fā)揮作用。如果 SELECT 列中包含了不在索引中的列,則無(wú)法使用覆蓋索引,查詢操作還是需要訪問(wèn)原始數(shù)據(jù)表,這樣會(huì)降低查詢效率。

??1.6、索引合并

【把多個(gè)單列索引合并使用】索引合并是指一個(gè)查詢語(yǔ)句需要多個(gè)索引才能滿足查詢條件,這時(shí)數(shù)據(jù)庫(kù)會(huì)使用索引合并算法來(lái)優(yōu)化查詢性能。索引合并可以將多個(gè)索引的結(jié)果合并成一個(gè)結(jié)果集,從而避免多次掃描索引和數(shù)據(jù)行。通過(guò)索引合并,可以提高查詢性能并降低系統(tǒng)開銷。

例子:

select email from info_test where email = 'BIN11@qq.com' and id=620783;

??1.7、刪除索引

drop index 索引名稱 on 表名

??二、索引實(shí)現(xiàn)方式

??2.1、hash索引

哈希索引就是基于哈希算法,對(duì)于每一行數(shù)據(jù),數(shù)據(jù)庫(kù)存儲(chǔ)引擎會(huì)對(duì)所有索引列都通過(guò)哈希算法去計(jì)算一個(gè)哈希碼,然后將這個(gè)哈希碼存儲(chǔ)在哈希索引中,由于使用的是哈希算法,所以使用哈希索引就會(huì)存在兩個(gè)弊端:

1、哈希算法計(jì)算出來(lái)的哈希值可能存在哈希沖突

2、由于計(jì)算出來(lái)的是個(gè)值所以無(wú)法進(jìn)行范圍查詢使用hash索引時(shí)會(huì)自動(dòng)創(chuàng)建一張hash索引表,索引表與數(shù)據(jù)表里的數(shù)據(jù)位置是不一致的

特別注意:對(duì)取單個(gè)詞的話比較快,但是對(duì)范圍查找比較慢

??2.2、btree索引

  1. 搜索速度快:btree索引具有非常高效的搜索速度,能夠快速地查找并返回相關(guān)數(shù)據(jù)。

  2. 空間利用率高:btree索引能夠在占用很少存儲(chǔ)空間的情況下,存儲(chǔ)大量數(shù)據(jù)。

  3. 范圍查詢效率高:btree索引在進(jìn)行范圍查詢時(shí)能夠非常高效地處理,大大提高了數(shù)據(jù)查詢的效率。

  4. 支持?jǐn)?shù)據(jù)排序:btree索引能夠?qū)Υ鎯?chǔ)在其中的數(shù)據(jù)進(jìn)行排序,提供了更加靈活的查詢和排序功能。

  5. 并發(fā)控制優(yōu)秀:btree索引的并發(fā)控制是非常優(yōu)秀的,能夠避免并發(fā)對(duì)索引的影響,確保數(shù)據(jù)的完整性和一致性。

  6. 適合多種數(shù)據(jù)類型:btree索引能夠適應(yīng)多種數(shù)據(jù)類型,不同類型的數(shù)據(jù)都能夠使用btree索引進(jìn)行索引和查詢

??2.3、創(chuàng)建索引的不利方面

  1. 空間占用:索引需要占用額外的磁盤空間,當(dāng)表數(shù)據(jù)增加時(shí),索引也會(huì)相應(yīng)增加,增加了存儲(chǔ)需求。

  2. 維護(hù)開銷:索引需要維護(hù),每次增刪改查都會(huì)更新索引,增加了維護(hù)開銷。

  3. 性能下降:雖然索引可以加速某些查詢,但是對(duì)于表的其他操作,如數(shù)據(jù)的增加、刪除和更新等,由于需要維護(hù)索引,所以性能反而會(huì)下降。

  4. 不必要的索引:有些索引并不是必須的,因?yàn)樗鼈兛赡苡肋h(yuǎn)不會(huì)被查詢,但是卻會(huì)影響到數(shù)據(jù)的插入和更新操作的速度。

  5. 索引失效:當(dāng)數(shù)據(jù)分布不均時(shí),某些索引可能會(huì)失效,即使查詢中使用了這些索引,也不能達(dá)到加速查詢的目的。此時(shí),需要重新評(píng)估索引的使用情況。

從上面有一點(diǎn)值得思考,我們創(chuàng)建索引就是用來(lái)使用的,我們要懂得如何命中索引,讓索引為我們工作

??三、無(wú)法命中索引情況

??3.1、模糊查詢

如果查詢中使用LIKE語(yǔ)句以通配符(%或_)開頭,則無(wú)法使用索引

但是實(shí)際項(xiàng)目中一般會(huì)使用第三方模塊進(jìn)行模糊查詢

??3.2、組合索引的最左前綴匹配

CREATE UNIQUE INDEX 組合索引名稱 ON 表名(列名1, 列名2, ...) 

組合索引的最左前綴原則表示,在多個(gè)列組成的索引中,如果要使用索引,必須使用索引的最左前綴列,也就是說(shuō),只有在滿足最左前綴列的搜索條件下,索引才會(huì)被使用。

舉例來(lái)說(shuō),如果有如下表格:

id name age gender
1 Tom 21 Male
2 Jack 22 Male
3 Lily 23 Female
4 Amy 22 Female
5 Bob 21 Male

如果創(chuàng)建一個(gè)組合索引(name, age, gender),那么滿足以下查詢條件時(shí),索引會(huì)被使用:

  • WHERE name = 'Tom'
  • WHERE name = 'Tom' AND age = 21
  • WHERE name = 'Tom' AND age = 21 AND gender = 'Male'

但是如果只使用其中部分列作為搜索條件時(shí),索引不會(huì)被使用,例如:

  • WHERE age = 21 (沒有使用最左前綴列name)
  • WHERE gender = 'Male' (沒有使用最左前綴列name和age)
  • WHERE age = 21 AND gender = 'Male'

注意:組合索引的效率 > 索引合并

??3.3、使用了函數(shù)或表達(dá)式

果查詢條件中使用了函數(shù)或表達(dá)式,MySQL就無(wú)法直接使用索引來(lái)匹配記錄。例如,在一個(gè)查詢中,如果使用了以下條件:WHERE YEAR(date)=2019,MySQL將無(wú)法使用date列上的索引來(lái)優(yōu)化查詢。一種可能的解決方法是創(chuàng)建一個(gè)計(jì)算列,將YEAR(date)的結(jié)果存儲(chǔ)在該列中,并在查詢中使用該計(jì)算列作為條件。

??3.4、列類型不匹配【隱式查詢】

如果查詢條件中的列類型與索引列的類型不匹配,MySQL將無(wú)法使用該索引。例如,如果在一個(gè)索引上查詢一個(gè)字符串類型的列,但查詢條件中使用了一個(gè)數(shù)字值,MySQL將無(wú)法使用索引來(lái)優(yōu)化查詢。一種解決方法是將查詢條件中的值轉(zhuǎn)換為與索引列類型相同的類型。

如:

Select?*?from` `tb1?where?name?= 999;

名字列的話很明顯是字符串類型,這里寫個(gè)999類型肯定不一致,查詢的速度肯定很慢,如果你用個(gè)引號(hào)引起來(lái)的話速度就會(huì)非常快了。

??3.5、or的錯(cuò)誤使用

or可以命中索引的幾類情況:

  1. OR操作符需要將多個(gè)條件拆分成單個(gè)條件,然后對(duì)每個(gè)條件進(jìn)行查詢,并將結(jié)果進(jìn)行組合。如果多個(gè)條件中只有一個(gè)條件能夠命中索引,那么查詢的效率會(huì)受到影響。

  2. OR操作符不能用于對(duì)同一個(gè)列的多個(gè)條件查詢。如果要對(duì)同一個(gè)列進(jìn)行多個(gè)條件查詢,應(yīng)該使用IN操作符。

  3. 如果要使用OR操作符進(jìn)行多個(gè)條件查詢,并且所有條件都能夠命中索引,那么查詢的效率會(huì)非常高。但是如果其中一個(gè)條件不能命中索引,那么查詢的效率會(huì)受到影響。

例如:

select?* ``from?tb1 ``where?nid = 1 ``or?email = ``'seven@live.com'``;

如果只有email列設(shè)置了索引那么這個(gè)語(yǔ)句整體的查詢速度也是不快的

但是如果是下面這種情況:

``select?* ``from?tb1 ``where?nid = 1 ``or?email = ``'seven@live.com'?and?name?= ``'alex'

其中只有nid和name列為索引列的話查詢的速度也是很快的,因?yàn)閙ysql會(huì)自動(dòng)忽略email 這不是索引的一列

??3.6、其他的情況

- 使用函數(shù)
  select * from tb1 where reverse(name) = 'wupeiqi';

- !=
  select * from tb1 where name != 'alex'
  特別的:如果是主鍵,則還是會(huì)走索引
      select * from tb1 where nid != 123
- >
  select * from tb1 where name > 'alex'
  特別的:如果是主鍵或索引是整數(shù)類型,則還是會(huì)走索引
      select * from tb1 where nid > 123
      select * from tb1 where num > 123
- order by
  select email from tb1 order by name desc;
  當(dāng)根據(jù)索引排序時(shí)候,選擇的映射如果不是索引,則不走索引
  特別的:如果對(duì)主鍵排序,則還是走索引:
      select * from tb1 order by nid desc;

-  索引失效:如果索引被損壞或者過(guò)期,MySQL無(wú)法使用該索引,進(jìn)行全表掃描。、

- 數(shù)據(jù)量過(guò)?。喝绻碇兄挥泻苌俚臄?shù)據(jù),使用索引可能會(huì)比全表掃描更慢,因?yàn)楹馁M(fèi)在索引掃描上的時(shí)間比全表掃描的時(shí)間還要長(zhǎng)。

- 范圍查詢:使用BETWEEN和IN等范圍查詢語(yǔ)句,MySQL會(huì)先執(zhí)行索引掃描,然后再進(jìn)行分類篩選,如果篩選后的結(jié)果占比過(guò)高,MySQL會(huì)放棄使用索引,進(jìn)行全表掃描。

??四、執(zhí)行計(jì)劃

??4.1、概念

在 MySQL 中可以通過(guò) explain 關(guān)鍵字模擬優(yōu)化器執(zhí)行 SQL語(yǔ)句,從而知道 MySQL 是如何處理 SQL 語(yǔ)句的。

具體地說(shuō),MySQL 的執(zhí)行計(jì)劃包含以下信息:

  1. 查詢語(yǔ)句的類型,如 SELECT、INSERT、UPDATE 和 DELETE 等。

  2. 查詢涉及的表和它們之間的連接方式。

  3. 查詢采用的索引類型和具體使用的索引。

  4. 每個(gè)表的訪問(wèn)方式,如全表掃描和索引掃描等。

  5. 執(zhí)行計(jì)劃的優(yōu)先級(jí)和執(zhí)行順序。

  6. 估算和實(shí)際行的數(shù)量、使用的時(shí)區(qū)和排序規(guī)則等。

4.2、創(chuàng)建方法

執(zhí)行計(jì)劃可以通過(guò)使用 EXPLAIN 命令來(lái)獲取,語(yǔ)法如下:

explain + 查詢SQL - 用于顯示SQL執(zhí)行信息參數(shù),根據(jù)參考信息可以進(jìn)行SQL優(yōu)化;

【MySQL速通篇004】這可能最詳細(xì)的關(guān)于MySQL基礎(chǔ)知識(shí)點(diǎn)的文章了

當(dāng)使用 EXPLAIN 命令時(shí),MySQL 會(huì)返回一個(gè)查詢結(jié)果集,包含以上信息。具體而言,返回結(jié)果包括以下列:

  1. - id:標(biāo)識(shí)查詢的標(biāo)識(shí)符,一般情況下為隨機(jī)生成的整數(shù)。
  2. - select_type:查詢類型,包括 SIMPLE、PRIMARY、UNION、SUBQUERY、DEPENDENT SUBQUERY 等。
  3. - table:</查詢涉及的表及其別名。 - partitions:查詢涉及的分區(qū)。
  4. - type:訪問(wèn)的類型,包括 ALL、INDEX、RANGE、REF、EQ_REF 和 CONST 等。
  5. - possible_keys:可能使用的索引,其值由逗號(hào)分隔的索引列表組成。
  6. - key:實(shí)際使用的索引。
  7. - key_len:索引字段的長(zhǎng)度。
  8. - ref:此列顯示哪個(gè)列或常量與 key 列一起被用于查找索引值。
  9. - rows:估算結(jié)果集中的行數(shù)。
  10. - filtered:結(jié)果集中符合條件的行數(shù)與結(jié)果集總行數(shù)的比例。
  11. - Extra:額外的信息,如使用了臨時(shí)表、使用了 filesort 等。
“Using index”
此值表示mysql將使用覆蓋索引,以避免訪問(wèn)表。不要把覆蓋索引和index訪問(wèn)類型弄混了。
“Using where”
這意味著mysql服務(wù)器將在存儲(chǔ)引擎檢索行后再進(jìn)行過(guò)濾,許多where條件里涉及索引中的列,當(dāng)(并且如果)它讀取索引時(shí),就能被存儲(chǔ)引擎檢驗(yàn),因此不是所有帶where子句的查詢都會(huì)顯示“Using where”。有時(shí)“Using where”的出現(xiàn)就是一個(gè)暗示:查詢可受益于不同的索引。
“Using temporary”
這意味著mysql在對(duì)查詢結(jié)果排序時(shí)會(huì)使用一個(gè)臨時(shí)表。
“Using filesort”
這意味著mysql會(huì)對(duì)結(jié)果使用一個(gè)外部索引排序,而不是按索引次序從表里讀取行。mysql有兩種文件排序算法,這兩種排序方式都可以在內(nèi)存或者磁盤上完成,explain不會(huì)告訴你mysql將使用哪一種文件排序,也不會(huì)告訴你排序會(huì)在內(nèi)存里還是磁盤上完成。
“Range checked for each record(index map: N)”
這個(gè)意味著沒有好用的索引,新的索引將在聯(lián)接的每一行上重新估算,N是顯示在possible_keys列中索引的位圖,并且是冗余的。

重點(diǎn)

需要注意的是,執(zhí)行計(jì)劃只是查詢優(yōu)化的一個(gè)階段,實(shí)際執(zhí)行的結(jié)果可能會(huì)受到多種因素的影響,包括數(shù)據(jù)分布、硬件性能等。因此,執(zhí)行計(jì)劃不能完全反映查詢?cè)趯?shí)際執(zhí)行中的表現(xiàn),但是它可以幫助開發(fā)人員分析查詢語(yǔ)句的性能問(wèn)題,從而進(jìn)行相應(yīng)的優(yōu)化。

??4.3、表的訪問(wèn)方式

執(zhí)行計(jì)劃中的 type 字段顯示了 MySQL 查詢數(shù)據(jù)表的方法,同時(shí)也是最需要關(guān)注的字段之一。MySQL 中查詢數(shù)據(jù)表的方式越簡(jiǎn)便,執(zhí)行速度就越快。以下是一些常見的 type 類型:

  1. - ALL:全表掃描,數(shù)據(jù)表沒有使用任何索引,這種方式的效率最低。
  2. - INDEX:全索引掃描,需要掃描數(shù)據(jù)表所有的索引,對(duì)于查詢的需要和原本數(shù)據(jù)表的分布情況關(guān)聯(lián)比較密切。
  3. - RANGE:索引區(qū)間掃描,僅僅掃描匹配條件的數(shù)據(jù),而不是全表掃描,大多適合一些有序數(shù)據(jù)類型。
  4. - REF:樸素索引反查,創(chuàng)建索引時(shí)只是索引主鍵、外鍵或唯一屬性,要根據(jù)需要查詢的屬性從數(shù)據(jù)表中查詢出結(jié)果。如果數(shù)據(jù)非常龐大,一般不會(huì)采用這種方式。
  5. - EQ_REF:聯(lián)合索引掃描,按最小數(shù)量查找結(jié)果集,并針對(duì)聯(lián)合索引中每個(gè)匹配的值進(jìn)行搜索。
  6. -CONST:索引匹配到一個(gè)已知的常量時(shí),直接查找結(jié)果集,是最快的查詢類型。
  7. - SYSTEM 系統(tǒng) 表僅有一行(=系統(tǒng)表)。這是const聯(lián)接類型的一個(gè)特例。
  8. - INDEX_MERGE 合并索引,使用多個(gè)單列索引搜索 select * from tb1 where name = 'alex' or nid in (11,22,33);

??4.4、索引的使用

執(zhí)行計(jì)劃中的 possible_keys 字段表示可以使用的索引,key 字段表示實(shí)際使用的索引。對(duì)于一些大型數(shù)據(jù)表和查詢量較大的應(yīng)用程序,索引的使用就顯得尤為重要。索引的使用可以在一定程度上減少數(shù)據(jù)表數(shù)據(jù)掃描的時(shí)間,減小查詢時(shí)間。MySQL 用生成的解釋計(jì)劃告訴開發(fā)人員在查詢中哪些索引可以用上,如果沒有使用到索引需要優(yōu)化查詢語(yǔ)句或者添加合適的索引。

??4.5、 SQL 的優(yōu)化

執(zhí)行計(jì)劃可以告訴你問(wèn)題是數(shù)據(jù)庫(kù)結(jié)構(gòu)、索引還是 SQL 語(yǔ)句的問(wèn)題。因此,分析執(zhí)行計(jì)劃有助于開發(fā)人員進(jìn)行 SQL 的優(yōu)化,從而提高查詢性能。優(yōu)化 SQL 的一些技巧包括:

  1. - 將復(fù)雜查詢拆分為簡(jiǎn)單查詢。 - 減少使用內(nèi)部查詢或子查詢。
  2. - 優(yōu)化 WHERE 子句,減少全表掃描。 - 對(duì) SELECT 和 FROM 子句進(jìn)行優(yōu)化,避免不必要的計(jì)算和 JOIN 操作。
  3. - 盡量減少使用 ORDER BY 和 GROUP BY 子句。

總之,執(zhí)行計(jì)劃是 MySQL 中一個(gè)非常重要的概念,通過(guò)分析執(zhí)行計(jì)劃可以有效地優(yōu)化查詢語(yǔ)句,提高數(shù)據(jù)庫(kù)查詢性能。同時(shí),也要注意實(shí)際執(zhí)行中的其他因素,如數(shù)據(jù)分布、硬件性能等。

??五、慢日志記錄

??5.1、作用

對(duì)于那些執(zhí)行時(shí)間比較長(zhǎng)的語(yǔ)句等,如果我們是想要mysql自動(dòng)幫我們記錄下來(lái),就要使用到慢日志

MySQL慢日志主要有以下幾個(gè)作用:

  1. 找出慢查詢。慢查詢指的是執(zhí)行時(shí)間較長(zhǎng)的SQL語(yǔ)句,這些語(yǔ)句可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)性能下降。通過(guò)MySQL慢日志,我們可以找出這些慢查詢,及時(shí)進(jìn)行優(yōu)化。
  2. 優(yōu)化SQL語(yǔ)句。通過(guò)分析MySQL慢查詢?nèi)罩?,我們可以找到SQL語(yǔ)句的瓶頸所在,進(jìn)行優(yōu)化,從而提高數(shù)據(jù)庫(kù)性能。
  3. 統(tǒng)計(jì)查詢頻率。通過(guò)統(tǒng)計(jì)MySQL慢日志中的查詢語(yǔ)句,我們可以了解哪些查詢語(yǔ)句最常被執(zhí)行,從而可以根據(jù)查詢頻率優(yōu)化數(shù)據(jù)庫(kù)索引等。
  4. 應(yīng)用于性能測(cè)試。MySQL慢日志提供了比較詳細(xì)的查詢?nèi)罩拘畔ⅲ沁M(jìn)行數(shù)據(jù)庫(kù)性能測(cè)試的重要工具之一。
  5. 總之,MySQL慢日志是數(shù)據(jù)庫(kù)性能優(yōu)化的必備工具之一,它可以幫助我們找出SQL語(yǔ)句中的瓶頸,從而提高數(shù)據(jù)庫(kù)性能

??5.2、查詢

a、配置MySQL自動(dòng)記錄慢日志

slow_query_log = OFF 是否開啟慢日志記錄 long_query_time = 2 時(shí)間限制,超過(guò)此時(shí)間,則記錄 slow_query_log_file = /usr/slow.log 日志文件 log_queries_not_using_indexes = OFF 為使用索引的搜索是否記錄

注:查看當(dāng)前配置信息:?  ?show variables like '%query%'?修改當(dāng)前配置:?    set global 變量名 = 值

【MySQL速通篇004】這可能最詳細(xì)的關(guān)于MySQL基礎(chǔ)知識(shí)點(diǎn)的文章了

b、查看MySQL慢日志

mysqldumpslow -s at -a  /usr/local/var/mysql/MacBook-Pro-3-slow.log

??5.3、詳細(xì)步驟

MySQL慢日志是記錄MySQL查詢?nèi)罩局械拈L(zhǎng)時(shí)間查詢的一種機(jī)制。他可以幫助我們找出執(zhí)行時(shí)間較長(zhǎng)的SQL語(yǔ)句,并對(duì)其進(jìn)行優(yōu)化。

查詢MySQL慢日志的步驟如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-451674.html

  1. 打開MySQL慢查詢?nèi)罩镜拈_關(guān)。在MySQL配置文件my.cnf中找到slow_query_log這個(gè)參數(shù),將其設(shè)置為on即可開啟慢查詢?nèi)罩?/li>
  2. 指定MySQL慢查詢?nèi)罩疚募T贛ySQL配置文件my.cnf中找到slow_query_log_file這個(gè)參數(shù),將其設(shè)置為您想要的路徑及文件名即可。如果沒有指定,默認(rèn)為MySQL數(shù)據(jù)目錄下的主機(jī)名-slow.log。
  3. 設(shè)置MySQL慢查詢?nèi)罩镜拈撝?。在MySQL配置文件my.cnf中找到long_query_time這個(gè)參數(shù),將其設(shè)置為您想要的閾值,即高于或等于該時(shí)長(zhǎng)的SQL語(yǔ)句被記錄到慢日志。默認(rèn)值為10秒。
  4. 重啟MySQL。執(zhí)行命令systemctl restart mysqld或service mysqld restart,以使配置生效。
  5. 查詢MySQL慢查詢?nèi)罩尽?梢酝ㄟ^(guò)命令查看MySQL慢查詢?nèi)罩荆簃ysqldumpslow -s t /var/lib/mysql/hostname-slow.log? # 查詢所有慢日志 mysqldumpslow /var/lib/mysql/hostname-slow.log? # 查詢慢日志中執(zhí)行時(shí)間大于5秒的SQL語(yǔ)句</ mysqldumpslow -t 5 /var/lib/mysql/hostname-slow.log
  6. 以上命令中的-s參數(shù)表示按執(zhí)行時(shí)間排序,-t參數(shù)表示指定執(zhí)行時(shí)間閾值。
  7. 分析MySQL慢查詢語(yǔ)句。MySQL慢查詢?nèi)罩静槌鰜?lái)的SQL語(yǔ)句并不是最優(yōu)的,需要進(jìn)行分析和優(yōu)化。可以用EXPLAIN命令查看執(zhí)行計(jì)劃,找到瓶頸所在,并優(yōu)化SQL語(yǔ)句。

到了這里,關(guān)于【MySQL速通篇004】這可能最詳細(xì)的關(guān)于MySQL基礎(chǔ)知識(shí)點(diǎn)的文章了的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 關(guān)于磁盤需要掌握得知識(shí)點(diǎn)

    扇區(qū)是數(shù)據(jù)的存儲(chǔ)單元,物理盤是實(shí)際的硬盤驅(qū)動(dòng)器,而位圖則是記錄磁盤陣列中扇區(qū)狀態(tài)的數(shù)據(jù)結(jié)構(gòu)。它們之間的關(guān)系是,物理盤組成了磁盤陣列,位圖用于跟蹤每個(gè)物理盤中的扇區(qū)狀態(tài)。 物理盤是指實(shí)際的硬盤驅(qū)動(dòng)器,它們是磁盤陣列中的物理存儲(chǔ)設(shè)備。在磁盤陣列中,

    2024年02月10日
    瀏覽(32)
  • 一些關(guān)于c++的瑣碎知識(shí)點(diǎn)

    一些關(guān)于c++的瑣碎知識(shí)點(diǎn)

    目錄 bool強(qiáng)轉(zhuǎn) const構(gòu)成重載:const修飾*p ?移動(dòng)構(gòu)造 new int (10)所做的四件事 this指針---為什么函數(shù)里面需要this指針? .和-的區(qū)別 new創(chuàng)建對(duì)象 仿函數(shù) new和malloc的區(qū)別 c++系統(tǒng)自動(dòng)給出的函數(shù)有 delete和delete[ ]區(qū)別何在 檢查有沒有析構(gòu)函數(shù) explict外部 內(nèi)存泄漏的本質(zhì):丟失了內(nèi)存地

    2024年02月07日
    瀏覽(21)
  • 關(guān)于OC中變量相關(guān)知識(shí)點(diǎn)

    眾所周知,變量是用來(lái)存儲(chǔ)數(shù)據(jù)的 圍繞著變量,有很多知識(shí)點(diǎn),總結(jié)歸納一下 變量的類型 變量的作用區(qū)域 局部變量 全局變量 靜態(tài)變量 變量的訪問(wèn)范圍 屬性 成員變量 實(shí)例變量 synthesize dynamic … 變量大致分為兩大類型: 基本數(shù)據(jù)類型 非基本數(shù)據(jù)類型(指針/對(duì)象/Class類型)

    2024年01月21日
    瀏覽(25)
  • 關(guān)于Linux同步機(jī)制知識(shí)點(diǎn)整理

    關(guān)于Linux同步機(jī)制知識(shí)點(diǎn)整理

    在Linux系統(tǒng)中,同步機(jī)制是操作系統(tǒng)中非常重要的一部分,以下是一些基本要點(diǎn): 互斥鎖 互斥鎖是一種「獨(dú)占鎖」,比如當(dāng)線程 A 加鎖成功后,此時(shí)互斥鎖已經(jīng)被線程 A 獨(dú)占了,只要線程 A 沒有釋放手中的鎖,線程 B 加鎖就會(huì)失敗,失敗的線程B于是就會(huì)釋放 CPU 讓給其他線程

    2024年02月11日
    瀏覽(21)
  • 關(guān)于BGP的一些知識(shí)點(diǎn);(1)

    BGP路由屬性中: ? ? 公認(rèn)必遵屬性有:Origin, AS_PATH,Next_hop ? ? ?公認(rèn)任意有:Local_Pref, Atomic_aggregate, ? ? ? ?其中MED為可選非過(guò)渡不屬于公認(rèn)屬性 ?Local-Preference是公認(rèn)任意屬性,且只能在一個(gè)AS內(nèi)傳播,默認(rèn)值為100 BGP的Cluster_List 屬性用來(lái)標(biāo)識(shí)路由器反射組,是可選非過(guò)

    2024年02月07日
    瀏覽(21)
  • 關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全34

    關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全34

    目錄 第13 章 外星人 13.1 回顧項(xiàng)目 game_functions.py 13.2 創(chuàng)建第一個(gè)外星人 13.2.1 創(chuàng)建 Alien 類 alien.py 13.2.2 創(chuàng)建 Alien 實(shí)例 alien_invasion.py 13.2.3 讓外星人出現(xiàn)在屏幕上 game_functions.py 13.3 創(chuàng)建一群外星人 13.3.1 確定一行可容納多少個(gè)外星人 注意 13.3.2 創(chuàng)建多行外星人 alien_invasion.py gam

    2024年02月04日
    瀏覽(20)
  • 關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全64

    關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全64

    目錄 20.2.15 確保項(xiàng)目的安全 settings.py 20.2.16 提交并推送修改 20.2.17 創(chuàng)建自定義錯(cuò)誤頁(yè)面 1. 創(chuàng)建自定義模板 500.html settings.py settings.py 注意 views.py 20.2.18 繼續(xù)開發(fā) 往期快速傳送門??(在文章最后): 感謝大家的支持!歡迎訂閱收藏!專欄將持續(xù)更新! 當(dāng)前,我們部署的項(xiàng)目存

    2024年02月03日
    瀏覽(36)
  • 關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全56

    關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全56

    ? 目錄 6. 鏈接到頁(yè)面new_topic topics.html 19.1.2 添加新條目 1. 用于添加新條目的表單 forms.py 2. URL模式new_entry urls.py 3. 視圖函數(shù)new_entry() views.py 4. 模板new_entry new_entry.html 5. 鏈接到頁(yè)面new_entry topic.html 19.1.3 編輯條目 1. URL模式edit_entry urls.py 2. 視圖函數(shù)edit_entry() views.py 往期快速傳送門

    2024年01月24日
    瀏覽(20)
  • 關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全42

    關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全42

    目錄 game_functions.py game_functions.py game_functions.py alien_invasion.py 14.4 小結(jié) 第15 章 生成數(shù)據(jù) 15.1 安裝 matplotlib 15.1.1 在 Linux 系統(tǒng)中安裝 matplotlib 15.1.2 在 OS X 系統(tǒng)中安裝 matplotlib 注意 15.1.3 在 Windows 系統(tǒng)中安裝 matplotlib 注意 15.1.4 測(cè)試 matplotlib 注意 15.1.5 matplotlib 畫廊 15.2 繪制簡(jiǎn)單的

    2024年02月03日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包