mysql連接查詢和in的效率取捨

例如:
A表
id   子id    父id
1      3        2
2      5        2
3      4         3
B表
id    name
3      xxx

5       xxx

首先我要得到a表父id爲2的項

在用獲得的子id去查B表

連接查詢:select name from A right join  B on A.子id =B.id where A.父id='2'   運算時間爲:0.562ms

in嵌套查詢:select name from B where id in(select A字id from A where A父id=2)運算時間爲:0.441ms

相比之下發現in效率更優於連接查詢,其實不然我們在來看二句語句連接查詢mysql只會執行一次查詢,而in會執行2次查詢,1句查詢和2句差距耗時這就不用比了吧。

結論:in適合小數據量,連接查詢大數據量更優,當然多表連接查詢還是能不用就不用的,大數據量時不建議使用多表連接查詢,應用時更因該相對於當下場景來選擇。

附上sql語句運算時間計算方法:

//計時開始
runtime();
 
//執行查詢
mysql_query($sql);
 
//計時結束.
echo runtime(1);

//計時函數   
function   runtime($mode=0)   {
    static   $t;   
    if(!$mode)   {   
        $t   =   microtime();
        return;
    }   
    $t1   =   microtime();   
    list($m0,$s0)   =   split("   ",$t);   
    list($m1,$s1)   =   split("   ",$t1);   
    return   sprintf("%.3f ms",($s1+$m1-$s0-$m0)*1000);
-此計時函數轉於某大蝦

發佈了33 篇原創文章 · 獲贊 17 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章