MySQL數據庫高級二:索引優化

索引優化非常的重要

1、預熱

 

 java開發

DBA培訓很少,需要經驗磨練

索引優化的效果非常好

左外連接

MySQL沒有全連接

7種join一定要會寫

具體見武林的例子

union的字段順序要相同

6、

union all不會去重但效率更高

字段順序一致!!!

7、

 寫法1

子查詢很重要

寫法2

 寫法3

寫法4

作業再議P341

2、索引簡介

 

 

索引結構

二叉樹缺點:最壞情況是鏈表

balance tree :b樹

平衡二叉樹

B樹和B+樹

紅色的是指向數據的指針

B+樹

 

MySQL用的是B+樹

B+tree的IO次數比Btree的IO少1/3

索引

group by更耗性能

Explain

先執行大的在執行小的

先從大到小再從上到下

在外層是主要查詢,內層是衍生查詢

key_len越長越好

 

主從複製簡介

主機寫到日誌中,從機讀取進行模仿

避免主從複製不同

操作不說了,是sql編程

創建函數

面試別提存儲過程,節外生枝

優化效果明顯 0.1—>0

int 型最多5

varchar幾十

key_len

1、單表索引:全值匹配我最愛,where篩選字段有多少索引用多少

索引的順序不影響:優化器會自動調整順序

索引層層匹配

索引分層,一層然後又一層

先命中一層然後到與之相關的下一層

一一命中,第一層的每個葉子點都是一棵樹

2、

按照順序命中

 

倆個速度都是全表掃描很慢

創建索引

上面的用上了索引,下面沒有

3、

4、

右邊的字段失效

範圍查詢字段,建立索引的時候放在前面後面的字段失效

 

5、

 

留個文件表示介紹效率低,職場上要學會說話

6、

7、

按照首字母建立的樹,如果首字母不確定無法建立索引樹,最好首字母確定

8、

 類型轉換會使類型失效

類型一定要匹配

一般性建議

過濾性好的字段,就是定位範圍小的

關聯查詢優化

 

倆個表的關聯查詢。第一個表叫驅動表,另一個表叫被驅動表,驅動表建立索引沒有意義

4個語句的執行效率

第二

 這個纔是最快的、第一

5.7自動進行了優化 

第4點是因爲虛擬表沒有辦法建立索引,因此子查詢最好不要放在被驅動表上

最好不要用子查詢

3和4的區別,3是把子查詢的虛擬表作爲驅動表, 被驅動表給了實體表因此有索引優化

 

 

練習題

需求拆開來寫

選取非掌門人的成員

索引失效需要優化,子查詢優化

 排序分組優化

order by就看extra

沒有過濾條件索引不可使用

order by和where的內容都要有索引,索引順序不能變

 

 索引優化排序

單路排序更加的快因爲是在內存進行排序

覆蓋索引儘量少的使用select*,多用具體的字段名

8個sql的作業

straight_join來進行優化

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章