sql優化核心思想一書主要以oracle為例進行資料庫優化的講解。
sql優化一定要看自己使用的資料的版本
select * from v$version where rownum = 1; 檢視資料庫的版本
第一章 sql優化必懂的概念
①基數 cardinality :這個基數指每一列的基數,比如:性別列,只有男女之分,那麼該列的基數就為2
檢查主鍵列與表中所有列是否有重複,可以採用如下的sql
select count(*) from test;
select count(distinct object_id) from test;
有乙個大致模糊的概念界限(原因是考慮到下面的乙個概念「回表」):
當查詢的結果返回表中5%以內的資料時,應該走索引
當查詢的結果超過表中5%以內的資料時,應該走全表掃瞄
②選擇性 selectivity :基數與表中總行數的比值再乘以100%就是某個列的選擇性。在進行sql優化的時候,單看列的基數是沒有意義的,基數必須對比總行數才有實際意義,所以才引出了選擇性這個概念
當表中資料足夠大,某一列沒有建立索引並且選擇性大於20%可以考慮建立索引。
③回表 table access by index rowid:通過索引中記錄的rowid訪問表中的資料叫回表。回表一般是單塊讀,回表次數太多會影響sql效能,如果回表次數太多就不應該走索引了,應該直接走全表掃瞄
備註:oracle12c新功能批量回表在一定程度上改善了單行回表的效能
④集群因子 clustering factor
集群因子介於表的塊數和行數之間
集群因子與塊數接近說明表的資料基本上市有序的,回表只需要讀取少量的資料塊就能完成。反之與表記錄接近,說明表的資料和索引順序差異很大,在進行索引範圍掃瞄或者索引全掃瞄的時候,回表會讀取更多的資料塊。
集群因子只會影響索引範圍掃瞄(index range scan)和索引全表掃瞄(index full range),只有這兩種方式會有大量的回表。
select owner,index_name,clustering_factor from dba_indexes where owner ='scott' and index_name ='idx_id';
集群因子影響的是物理i/o 次數
SQL 優化核心思想
概念 英文含義 影響示例 計算臨界 基數cardinality 某個列唯一鍵 distinct keys 的數量 基數的高低影響列的資料分布 性別字段基數為2 5 當查詢結果返回表中5 以內的資料時應該走索引 反之,走全表掃瞄 在表中有male 有 50個,總資料100,那麼檢索 male,50 不...
機器學習筆記 xgboost核心思想
今天給大家講xgboost,這是乙個非常優秀的演算法,在各大回歸類的人工智慧競賽中,經常可以在榜首看到這個演算法的身影。前面我們已經講了決策樹,提公升樹 boostingdecision tree 是迭代多棵決策樹來共同決策,當採用平方誤差作為損失函式的時候,每一棵樹學習的是之前所有樹之和的殘差值,...
Vuejs核心思想學習筆記
習vue已經有一段時間了,但未對其核心思想作自己的總結和理解 vue核心思想有兩個 資料驅動和元件化 系統元件 資料驅動 資料驅動目的是讓資料和dom保持同步,只要修改了data資料,dom就會做相應的改變。vue已經將這一邏輯封裝好人工無需手動去操作dom,vue的資料驅動是利用了object.d...