nic*_*ckb 7 php mysql performance pdo
我需要执行一个简单的查询.
从字面上看,我需要做的就是:
SELECT price, sqft, zipcode FROM homes WHERE home_id = X
Run Code Online (Sandbox Code Playgroud)
当我使用PHP PDO时,我读过的是连接到MySQL数据库的推荐方法,只需创建连接就需要610毫秒.
我的代码如下:
try {
$conn_str = DB . ':host=' . DB_HOST . ';dbname=' . DB_NAME;
$dbh = new PDO($conn_str, DB_USERNAME, DB_PASSWORD);
$params = array();
$sql = 'SELECT price, sqft, zipcode FROM homes WHERE home_id = :home_id';
$params[':home_id'] = X;
$stmt = $dbh->prepare($sql);
$stmt->execute($params);
$result_set = $stmt->fetchAll(PDO::FETCH_ASSOC);
// json output
ob_start("ob_gzhandler");
header('Content-type: text/javascript; charset=utf-8');
print "{'homes' : ";
print json_encode( $result_set );
print '}';
ob_end_flush();
$dbh = null;
} catch (PDOException $e) {
die('Unable to connect');
}
Run Code Online (Sandbox Code Playgroud)
问题:连接到MySQL数据库以执行上述查询的最快方法是什么?
Mar*_*c B 12
如果缓慢是由于必须通过网络到达每个连接,并且mysql必须执行反向DNS查找以检查其GRANTs表,那么该开销可能很好地解决了大部分延迟.切换到持久连接将使其成为连接生命周期的一次性成本.
然而,这确实导致了其他问题.由于事务被回滚并且当持有它们的连接关闭时释放锁定,因此持续存在意味着它们将保持活动状态.如果不仔细处理代码以避免连接处于不一致状态,您可能会创建死锁或至少锁定所有其他连接,直到您手动进行清理.
最快的可能:
mysqli_connect("servername", "user", "pass") or die("can't connect");
mysqli_select_db("dbname") or die("can't select database");
list($price, $sqft, $zipcode) = mysqli_fetch_array(mysqli_query("SELECT price, sqft, zipcode FROM homes WHERE home_id = ".mysqli_real_escape_string($home_id)));
Run Code Online (Sandbox Code Playgroud)
[编辑]:现在使用mysqli而不是mysql.
猜猜PDO和MYSQLI一样快.我认为你的问题是你如何与PDO联系.你的connectionstring看起来像是这样的:
:host=localhost;:dbname=foo
Run Code Online (Sandbox Code Playgroud)
并且存在问题...... PDO尝试连接到localhost,但是PDO使用DNS 将localhost转换为127.0.0.1,这就是花费时间.如果您直接使用127.0.0.1,则不会再遇到这些问题:)所以connectionstring必须看起来像
:host=127.0.0.1;:dbname=bar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14670 次 |
| 最近记录: |