gpt4 book ai didi

php - Mysqli查询性能多查询

转载 作者:行者123 更新时间:2023-12-01 00:05:04 25 4
gpt4 key购买 nike

我只是希望有人可以帮助我使用多查询加快 4 个查询。

目标: 一个单一的多查询作为下面的单一查询。

简单查询,我正在检查一个表以查看用户是否被禁止,如果没有,我将获取 id 的行并将其查看计数更新为 1。如果用户被禁止,我不希望最后一个查询完成。

提前感谢您的帮助。

当前性能约为 1200 毫秒。(+1000 毫秒,用于 facebook 图形 API 查询)。

注意:af_freefeed.pageid 和 af_ban.pageid 都已在数据库中编入索引。

另外: 我一直在研究和引用 http://www.php.net/manual/en/mysqli.multi-query.php 我只是可以看不到如何使用 if()

将此配置转换为 multi
$fconn = new mysqli($fdbhost, $fdbuser, $fdbpass, $fdbname) or die  ('Error connecting to mysqli');
// 12,000 rows for af_ban - bigint(255) : indexed
$q = sprintf('SELECT COUNT(pageid) AS numrowst FROM af_ban WHERE pageid = %s', $banpage);
$readtop = $fconn->query($q);
$rowtop = $readtop->fetch_assoc();

// 1.17 million rows for af_freefeed - bigint(255) : indexed
if($rowtop[numrowst] == 0){
$q = sprintf('SELECT COUNT(pageid) AS numrowsf FROM af_freefeed WHERE pageid = %s', $banpage);
$readf = $fconn->query($q);
$rowf = $readf->fetch_assoc();
// increment views
$read = $fconn->query("Update af_freefeed SET views = views + 1 WHERE pageid = ".$banpage."");
}
$q=$fconn->query("SELECT pagename,views,pageid FROM af_freefeed ORDER BY views DESC LIMIT 0, 20");
unset($q);
unset($rowf);
unset($rowtop);
mysqli_close($fconn);

实际请求时间。

  1. grah api:1127.04610825ms。
  2. 连接:1.20711326599ms。
  3. 检查被禁止:0.405788421631ms。
  4. 获取行:418.189229965ms。
  5. 观看次数增加:472.24655151 毫秒。
  6. 获得前 20 名:94.31447983 毫秒。

多查询 #1 如果用户被禁止,如何停止多查询?


可能的竞争者: 943.8181ms。如果添加:933.1279ms。如果被禁止

  1. 如果禁止退出循环,则相差 10 毫秒。这让我相信循环在实际执行“next_result”之前完成了所有查询。或者我在如何循环函数方面有错误。

  2. exit; 替换为 $thread_id = $fconn->thread_id; $fconn->kill($thread_id);如果禁止 953.4719ms。 没有收获


$banpage='234232874008';
$query = "SELECT pagename,views,pageid FROM af_freefeed ORDER BY views DESC LIMIT 0, 2;";
$query .= "SELECT pageid AS isbanned FROM af_ban WHERE pageid = \"".$banpage."\";";
$query .= "SELECT pageid AS isadded FROM af_freefeed WHERE pageid = \"".$banpage."\";";
$query .= "Update af_freefeed SET views = views + 1 WHERE pageid = \"".$banpage."\"";
/* execute multi query */
if ($fconn->multi_query($query)) {
if ($result = $fconn->store_result()) {
while ($row = $result->fetch_row()) {
print_r($row).'<br />';
}
$result->free();
}
if ($fconn->more_results()) {
while ($fconn->next_result()){
if($thisresult = $fconn->store_result()){
while (is_array($row = $thisresult->fetch_array())) {
if(isset($row['isbanned'])){
if($row['isbanned']===''.$banpage.''){
$thread_id = $fconn->thread_id;
$fconn->kill($thread_id);
// exit;
}
}
}

}
}
}
}

unset($query);
unset($result);
unset($thisresult);

Multi_query #2“current for benchmark”如何在 next_result() 之后删除结果集中的重复字段?


2.667ms./1032.2499ms. 但 print_r 在 $thisresults 中显示重复字段?

**Array
(
[0] => 37
[id] => 37
[1] => 159616034235
[pageid] => 159616034235
[2] =>
[userid] =>
[3] => 30343
[views] => 30343
[4] => Walmart
[pagename] => Walmart
)**

$query = "SELECT pageid AS isbanned FROM af_ban WHERE pageid = \"".$banpage."\";";
$query .= "SELECT pageid AS isadded FROM af_freefeed WHERE pageid = \"".$banpage."\";";
$query .= "SELECT * FROM af_freefeed ORDER BY views DESC LIMIT 0, 20";
//$query .= "Update af_freefeed SET views = views + 1 WHERE pageid = \"".$banpage."\"";
/* execute multi query */
echo '<pre>';
$i=0;
if ($fconn->multi_query($query)) {
if ($result = $fconn->store_result()) {
//$row = $result->fetch_assoc();
while ($row = $result->fetch_assoc()) {
print_r($row).'<br />';
}
$result->free();
}
if ($fconn->more_results()) {
while ($fconn->next_result()){
if($thisresult = $fconn->store_result()){
while ($row2 = $thisresult->fetch_array()) {
if(isset($row2['isadded'])){
if($row2['isadded']===''.$banpage.''){
$addone = $fconn->query("Update af_freefeed SET views = views + 1 WHERE pageid = ".$banpage."");

}
}
print_r($row2);
}

}
}
}

}
/* determine our thread id */
$thread_id = $fconn->thread_id;
/* Kill connection */
$fconn->kill($thread_id);
//

echo '</pre><hr/>';

最佳答案

尝试使用 index 来获取计数。例如 COUNT(pageid)。它会加快您的查询速度。

更新

你也可以试试这个 link 进一步解释

关于php - Mysqli查询性能多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16393334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com