最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Mysql調(diào)優(yōu)系列視頻【索引】【索引優(yōu)化】【SQL優(yōu)化】

2023-07-26 07:35 作者:我愛羅文_  | 我要投稿

mysql的優(yōu)化大綱:

數(shù)據(jù)結(jié)構(gòu)算法: 二叉樹---->平衡二叉樹(紅黑樹)---->B樹(平衡多路查找樹)---->B+樹(B樹的進(jìn)階),也就是mysql的底層數(shù)據(jù)結(jié)構(gòu)

二叉樹: 每個節(jié)點(diǎn)最多有兩個子節(jié),并遵循左邊小于右邊,數(shù)據(jù)隨機(jī)性情況樹杈越明顯,缺點(diǎn):隨著數(shù)據(jù)的增多,樹的結(jié)果會越高,數(shù)據(jù)查詢的效率會變慢,如果數(shù)據(jù)是按順序來排序依次進(jìn)入的話,樹的高度則會更明顯

紅黑樹:雖通過自旋平衡,子節(jié)點(diǎn)自動分為2個,從而減少樹的高度,當(dāng)數(shù)據(jù)有序時,更明顯,檢索結(jié)果更佳,數(shù)據(jù)量越大樹也會越高

b-tree:b-tree的出現(xiàn),可以解決樹的高度的問題,他不在限制一個父節(jié)點(diǎn)中只有兩個子節(jié)點(diǎn),而是允許M個子節(jié)點(diǎn)(M>2)。不僅如此,B樹的一個節(jié)點(diǎn)可以存儲多個元素,相交于二叉樹的結(jié)構(gòu)又將整體的樹高度降低了

B+tree:b+tree是b樹的一種升級優(yōu)化,更適合做存儲索引結(jié)構(gòu),在B+tree中,非葉子節(jié)點(diǎn)上僅存儲key,不存儲數(shù)據(jù),所有的數(shù)據(jù)均存儲在葉子的節(jié)點(diǎn)上面,并且是按照順序來排序的,此外在B+tree中·各個數(shù)據(jù)頁之間是雙向鏈表連接的,葉子節(jié)點(diǎn)中的數(shù)據(jù)是單向鏈表連接的。


聚集索引和非聚集索引的區(qū)別?

按物理存儲分類:innerdb屬于聚集索引,mysisam屬于非聚集索引

聚集索引:它的子葉同時存儲索引和數(shù)據(jù)

非聚集索引:它的子葉只存儲索引和指針,需要通過指針來查找具體的數(shù)據(jù)

效率:聚集索引更快


二級索引:所有非主鍵索引都稱為二級索引,并且二級索引為非聚集索引,查找數(shù)據(jù)需要進(jìn)行回表


覆蓋索引: 需要查詢的字段都在索列中的情況稱為覆蓋索引,索引列覆蓋了查詢字段的意思


索引下推:是mysql5.6之后針對掃描二級索引的一項(xiàng)改進(jìn),用來在范圍查詢是減少回表的次數(shù),將需要回表的查詢一次性完成


單列索引:只有一個索引字段(name)


聯(lián)合索引:多個索引字段(name,age,heigt),聯(lián)合索引需要遵循最左前綴原則,因?yàn)闆]有第一列的話,直接訪問第二列,那么第二列肯定是無序的,直接訪問后面的列就用不到索引了


單向索引和聯(lián)合索引分別在什么場景創(chuàng)建,優(yōu)勢是什么?

聯(lián)合索引的優(yōu)勢:

1.減少開銷:

建立一個聯(lián)合索引,實(shí)際上相當(dāng)于創(chuàng)建了多個索引((a), (a,b), (a,b,c)),每單獨(dú)建一個索引,都會增加寫操作的開銷和磁盤的開銷,對于大量的數(shù)據(jù),使用聯(lián)合查詢會大大減少開銷

2.覆蓋索引:

select a,b,c from table where a ='xx' and b='xxx'

那么mysql可以直接遍歷索引取得數(shù)據(jù),而無需回表,減少了很多的io操作,減少io操作,特別是隨機(jī)io是dba主要的優(yōu)化機(jī)制

3.效率高:

索引列多,通過聯(lián)合索引篩選出的數(shù)據(jù)越少,比如有100萬條的數(shù)據(jù)表,有如下sql:

select col1,col2,col3 from table where col1='1' and colw='2' and col2='3'

如果是單列的話需要查找三次


索引的優(yōu)點(diǎn):

1.提高檢索效率

2.降低排序成本,索引對應(yīng)的字段已經(jīng)有一個自動排序·功能的,默認(rèn)是升序asc


索引的缺點(diǎn):

1.創(chuàng)建索引和維護(hù)索引需要耗費(fèi)時間,這種時間會隨著數(shù)據(jù)增加而增加

2.索引需要占用無聊空間,數(shù)據(jù)量越大,占用越多

3.會降低表增刪改的效率,因?yàn)槊看卧鰟h改索引,都需要進(jìn)行動態(tài)維護(hù)


sql以及索引優(yōu)化:

1.創(chuàng)建索引減少掃描量·

2.調(diào)整索引減少計(jì)算量

3.索引覆蓋(減少不必訪問的列,避免回表查詢)

4.干預(yù)執(zhí)行計(jì)劃

5.sql改寫


如果索引失效,需要排查:

手動添加索引:force index(idx_name_age_position)

1.遵循最左前綴原則

2.不在索引列上做任何操作(計(jì)算,函數(shù),(自動or手動), 類型轉(zhuǎn)換),會導(dǎo)致索引失效而造成全表掃描

3.索引引擎不能使用索引中范圍條件中右邊的列,范圍查詢會使得字段無序,造成部分索引失效

4.盡量使用覆蓋索引(只訪問索引的查詢(索引列包含列),減少select * 語句,覆蓋索引不寫*

5.不等空值還有or,索引失效要少用

6.like百分寫在最右

7.字符串不加單引號索引會失效

8.范圍查詢優(yōu)化


trace工具用法:(跟蹤查詢過程和結(jié)果)

第一階段:sql準(zhǔn)備階段,格式化sql

第二階段:sql優(yōu)化階段

第三階段:預(yù)估表的訪問成本 -->對全表掃描情況行數(shù),查詢成本,再查詢索引的成本,再根據(jù)估值分決定用索引還是全盤掃描



sql最佳實(shí)踐:

1.避免使用select *:?

1).會增加查詢解析器的成本

2).不走覆蓋索引會產(chǎn)生大量的回表查詢

3).浪費(fèi)cpu和內(nèi)存資源


2.小表驅(qū)動大表:

用數(shù)據(jù)量少的表用索引和條件大表進(jìn)行數(shù)據(jù)篩選,從而減少數(shù)據(jù)計(jì)算量,提高查詢效率


3.用連接查詢代替子查詢:

1).子查詢需要執(zhí)行兩次數(shù)據(jù)庫查詢,一次是外部,一次是嵌套子查詢。因此,使用連接查詢可以減少數(shù)據(jù)庫查詢的次數(shù),提高查詢的效率

2).連接查詢可以更好的利用數(shù)據(jù)庫索引,提高查詢性能。子查詢通常會使用臨時表或內(nèi)存表,而連接查詢可以直接利用表上的索引。這意味著連接查詢可以更快的訪問表中的數(shù)據(jù),減少查詢的資源消耗

3).對于大型數(shù)據(jù)集,使用連接查詢通常比使用子查詢更高效,子查詢通常需要掃描整個表,而連接查詢可以利用索引加速讀取操作




Mysql調(diào)優(yōu)系列視頻【索引】【索引優(yōu)化】【SQL優(yōu)化】的評論 (共 條)

分享到微博請遵守國家法律
靖西县| 宁德市| 株洲县| 锡林郭勒盟| 东丰县| 泰兴市| 崇义县| 宜黄县| 乐清市| 大丰市| 建昌县| 健康| 前郭尔| 鄄城县| 池州市| 高淳县| 扶余县| 大港区| 西吉县| 泸州市| 偃师市| 平潭县| 城市| 蚌埠市| 墨江| 安顺市| 万安县| 河西区| 绿春县| 莆田市| 封开县| 建平县| 惠东县| 兴义市| 定西市| 余江县| 巍山| 石狮市| 江安县| 泽州县| 临沂市|