$this -> db -> reconnect();
$mysqli = new mysqli();
$mysqli -> query("SET NAMES utf8");
if (mysqli_connect_errno()) {
printf('Connect failed: %s\n', mysqli_connect_error());
exit();
}
if($set){
$mysqli ->multi_query("SET {$set} ");
}
//$query = 'CALL p_MyFrontAndBackListTie(2)';
/* execute multi query */
if ($mysqli -> multi_query($query)) {
do {
/* store first result set */
if ($result = $mysqli -> store_result()) {
while ($row = $result -> fetch_all()) {
$all_result[] = $row;
}
$result -> free();
}
}
while ($mysqli -> next_result());
}
/* close connection */
$mysqli -> close();
return $all_result;
CI调用存储过程很慢怎么提速,mysql存储过程本身执行很快,但是在php调用就要0.8s
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 在代码中使用存储过程来处理数据时,往往需要多次进行数据库连接和关闭,这会增加数据库操作的时间。为了避免这种情况,可以将多次数据库连接和关闭的代码封装在一个类或函数中,供需要调用存储过程的代码使用。同时还可以考虑一些其他的优化手段,比如:
缓存结果集:在存储过程返回结果集时,可以将结果集缓存起来,供需要的代码使用,这可以减少对数据库的查询次数。
优化存储过程:可以使用 MySQL 自带的性能分析工具
EXPLAIN
来找到存储过程的性能瓶颈,进而进行优化。调整数据库参数:可以通过调整 MySQL 的一些参数来优化存储过程的执行效率,比如
max_allowed_packet
、wait_timeout
等参数。采用缓存技术:可以使用缓存技术来缓存存储过程的结果,这可以减少对数据库的访问次数,进而提高性能。
采用异步技术:可以将存储过程的执行放到一个异步任务中执行,这可以将存储过程的执行与程序的其他逻辑分离,进而提高程序的响应速度。
总之,可以通过代码优化、存储过程优化、数据库参数调整以及采用缓存技术和异步技术等手段,来提高存储过程的执行效率,从而优化程序性能。
下面是一个简答的优化版本:
// 封装一个类来处理数据库连接 class DB { private $mysqli; private $host = 'localhost'; private $username = 'root'; private $password = 'password'; private $dbname = 'myDatabase'; public function __construct() { $this->mysqli = new mysqli($this->host, $this->username, $this->password, $this->dbname); $this->mysqli->query("SET NAMES utf8"); if (mysqli_connect_errno()) { printf('Connect failed: %s\n', mysqli_connect_error()); exit(); } } public function query($sql) { $this->mysqli->multi_query($sql); $all_result = array(); do { if ($result = $this->mysqli->store_result()) { $all_result[] = $result->fetch_all(); $result->free(); } } while ($this->mysqli->next_result()); return $all_result; } public function __destruct() { $this->mysqli->close(); } } // 调用DB类来执行存储过程 $db = new DB(); $query = 'CALL p_MyFrontAndBackListTie(2)'; $all_result = $db->query($query); return $all_result;
这里将数据库连接和关闭封装在了
DB
类中,同时使用了fetch_all()
方法来批量获取结果集,减少了对数据库的访问次数。注意,这只是一个简单的例子,实际情况可能有所不同。在优化存储过程执行效率时,需要根据具体情况进行调整和优化。解决 无用评论 打赏 举报
悬赏问题
- ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 報錯:Person is not mapped,如何解決?