2019-02-18
閱讀量:
772
prepare與sql的開銷
問題描述:
相同的SQL查詢語句用prepare與query的開銷是一樣大的嗎?
$sql = $pdo -> prepare("select * from table");
$sql -> execute();
$rs = $sql -> fetch(PDO :: FETCH_ASSOC);
$sql = $pdo -> query("select * from table");
$rs = $go -> fetch(PDO :: FETCH_ASSOC);
例如上面prepare與query查詢是否效率一樣?(忽略SQL語句注入)。
單條查詢結(jié)果用哪一條比較好?
prepare是否在查詢時會向數(shù)據(jù)庫至少發(fā)送兩次數(shù)據(jù)庫?
exec是否更適用于update、insert into?
解決方法:
PHP 的 PDO里面有個選項,叫 ATTR_EMULATE_PREPARES
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,?false);
正式的prepare需要把這個設(shè)置成false。
正式的prepare 需要和數(shù)據(jù)庫服務(wù)器通信兩次,一次prepare,一次“填空”。
query和exec只需要一次。
所以看起來prepare會慢。
但是prepare 之后,“填空”的速度是優(yōu)化過的,格外快。
所以結(jié)論是,如果SQL服務(wù)器在本地,prepare和query在執(zhí)行一次的時候幾乎是速度一樣的。
如果需要插入100次數(shù)據(jù),需要prepare一次,“填空”100次,同等條件下(SQL服務(wù)器網(wǎng)絡(luò)延遲相同),prepare的速度遠遠優(yōu)于一條一條query執(zhí)行。
如果客戶端和SQL服務(wù)器距離差半個地球,那么query可能更快。






評論(0)


暫無數(shù)據(jù)
推薦帖子
0條評論
0條評論
0條評論
1條評論