MySQL優化-小表驅動大表原則


對於程序而言,外層循環越大,性能越低,對於數據庫而言,永遠是小的數據集放在最外層
程序設計原則:小的循環放到最外層,大的循環放在最小層
我們通過設置x、y、z的值來測試,而 x * y * z它的值是不變的,即我們測試的總循環次數不變。我們通過調整x、y、z的值分別來測試一下
注意,這里的測試需要通過三層for循環才能測出效果
public class ForTest {
// Integer.MAX_VALUE = 2147483647
//    static int x = 1000000000;
    static int x = 10000;
    static int y = 1000;
    static int z = 1000;

    public static void main(String[] args) {
        test1();
    }

    public static void test1() {
        long nanoTime1 = System.currentTimeMillis();
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                for (int m = 0; m < z; m++) {
                    int a = 10;
                    int b = 20;
                    int c = a + b;
                }
            }
        }
        long nanoTime2 = System.currentTimeMillis();
        System.out.println("總耗時:" + (nanoTime2 - nanoTime1));
    }
}

測試結果:

 

 

LEFT JOIN
select *  A left join  B on A.id = B.aid 是給A表加索引還是給B表加索引?
對於left join而言,此SQL相當於
for (int i=0; i<A.size(); i++) {
    for (int i=0; i<B.size(); i++) {
        if(A.id==B.aid) {
        }
    }
}
當A表為小表時,性能要比A表為大表的性能要高
索引建立原則:因為A表為基准表(固定不變的),B表為驅動表,因此需要在B表建立索引,即程序為:
for (int i=0; i<A.size(); i++) {
    B b = findB(A.id); // 通過索引查找
}

從另一個角度而言,假設A表數據集為100條,B表數據集為100000條,給B表加索引要比A表加索引要好!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM