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);
}