索引優化非常的重要
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來進行優化