2張表a,b,a有10個字段,b有2個字段,a/b在字段id上都有索引,假設a表有5萬條記錄,b表有20萬條記錄,現在a和b做連線a.id=b.id。
方案1: a做全表掃瞄,b使用索引
方案2: b做全表掃瞄,a使用索引
請問哪種方案查詢效率高?
根據oracle優化路徑
rule 模式下的規則:
1、有兩個索引存在的情況下,from後面大表在前。小表(返回記錄少的表,不是記錄少的表)在最後,作為驅動表,oracle處理sql語句是從左到右
2、有乙個索引,則順序無關
3、都沒有索引,則大表應該在後
要根據有無索引,詳細如下:
表a有n行資料,符合連線條件的行樹為a1,表b有m行資料,符合連線條件的行樹為b1
1.a,b兩表均無索引
如果a表驅動,則a表掃瞄一次,b表掃瞄a1次. 磁碟訪問次數為:n+a1*m;
如果b表驅動,則b表掃瞄一次,a表掃瞄b1次. 磁碟訪問次數為:m+b1*n;
2.a表無索引,b表有索引
如果a表驅動,則a表掃瞄一次,b表查a1次索引. 磁碟訪問次數為:n+a1*log(m)/log(2);
如果b表驅動,則b表查一次索引,a表掃瞄b1次. 磁碟訪問次數為:log(m)/log(2)+b1*n
3.a表有索引,b表無索引
如果b表驅動,則b表掃瞄一次,a表查b1次索引. 磁碟訪問次數為:m+b1*log(n)/log(2);
如果a表驅動,則a表查一次索引,b表掃瞄b1次. 磁碟訪問次數為:log(m)/log(2)+b1*n
4.a,b表均有索引
如果a表驅動,則a表查一次索引,b表查a1次索引.
磁碟訪問次數:log(m)/log(2)+a1*log(n)/log(2);
如果b表驅動,則b表查一次索引,a表掃瞄b1次.
磁碟訪問次數為:b1*log(m)/log(2)+log(n)/log(2)
索引效率優化
索引是提高資料查詢最有效的方法,也是最難全面掌握的技術,因為正確的索引可能使效率提高10000倍,而無效的索引可能是浪費了資料庫空間,甚至大大降低查詢效能。索引的管理成本 1 儲存索引的磁碟空間 2 執行資料修改操作 insert update delete 產生的索引維護 3 在資料處理時回需額外...
索引效率優化
索引是提高資料查詢最有效的方法,也是最難全面掌握的技術,因為正確的索引可能使效率提高10000倍,而無效的索引可能是浪費了資料庫空間,甚至大大降低查詢效能。索引的管理成本 1 儲存索引的磁碟空間 2 執行資料修改操作 insert update delete 產生的索引維護 3 在資料處理時回需額外...
mysql 分析索引效率
分析索引效率 現在我們已經知道了一些如何選擇索引列的知識,但還無法判斷哪乙個最有效。mysql提供了乙個內建的sql命令幫助我們完成這個任務,這就是explain命令。explain命令的一般語法是 explain explain select peopleid from people where ...