索引效率的問題

2021-05-13 01:10:37 字數 1163 閱讀 9478

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 ...