1. 程式人生 > 其它 >MySQL優化-小表驅動大表原則

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 *Aleft joinBon 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表加索引要好!