$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 burpsuite密码爆破
- ¥15 关于#ubuntu#的问题,如何解决?(相关搜索:移动硬盘)
- ¥15 scikit安装之后import不了
- ¥15 Ros2编译一个使用opencv的c++节点的时候,报了这个错误,请问怎么解决啊
- ¥15 人脸识别相关算法 YOLO,AI等
- ¥15 spark问题方便加V17675797079
- ¥15 Python代码不打印的原因
- ¥20 微软SEAL库的安装和使用,VS2022环境配置问题
- ¥15 数学问题也不知道那种类型的问题
- ¥15 R作图的时候,文本框重叠了怎么办?