MYSQL的聯合查詢最好是少用,效能差別巨大

一樣的功能,不一樣的寫法,時間和內存佔用差了幾千倍,不廢話,直接上代碼json

第一種寫法:
代碼以下:ui

$Rs=DB::get($_ENV['DB'],3,"SELECT * FROM _xiazhu WHERE uid IN(SELECT id FROM _user WHERE id<5000)");
var_dump($Rs);

內存和時間:
內存使用:96514.53Kb 運行時間:1272.73mscode

第二種寫法:
代碼以下:內存

$Sql='';
$Rs=DB::get($_ENV['DB'],3,"SELECT id FROM _user WHERE id<5000");
$Sql.=(count($Rs)>0) ? " AND id IN(".strtr(json_encode($Rs,JSON_UNESCAPED_UNICODE),array('{"id":"'=>'','"}'=>'','['=>'',']'=>'')).')' : '';
unset($Rs);

$Rs=DB::get($_ENV['DB'],3,"SELECT * FROM _xiazhu WHERE 1=1{$Sql}");
var_dump($Rs);
unset($Sql);

內存和時間:
內存使用:9.77Kb 運行時間:11.97ms開發

由此可見,若是你不急於追趕開發進度的話,建議你使用第二種方法分開寫,速度會有明顯的差別.get

相關文章
相關標籤/搜索