蓝伤sky 2016-04-07 07:17 采纳率: 0%
浏览 1594

CI调用存储过程很慢怎么提速,mysql存储过程本身执行很快,但是在php调用就要0.8s

                            $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;
  • 写回答

1条回答 默认 最新

  • 不良使 Python领域潜力新星 2023-06-06 21:14
    关注

    在代码中使用存储过程来处理数据时,往往需要多次进行数据库连接和关闭,这会增加数据库操作的时间。为了避免这种情况,可以将多次数据库连接和关闭的代码封装在一个类或函数中,供需要调用存储过程的代码使用。同时还可以考虑一些其他的优化手段,比如:

    1. 缓存结果集:在存储过程返回结果集时,可以将结果集缓存起来,供需要的代码使用,这可以减少对数据库的查询次数。

    2. 优化存储过程:可以使用 MySQL 自带的性能分析工具 EXPLAIN 来找到存储过程的性能瓶颈,进而进行优化。

    3. 调整数据库参数:可以通过调整 MySQL 的一些参数来优化存储过程的执行效率,比如 max_allowed_packetwait_timeout 等参数。

    4. 采用缓存技术:可以使用缓存技术来缓存存储过程的结果,这可以减少对数据库的访问次数,进而提高性能。

    5. 采用异步技术:可以将存储过程的执行放到一个异步任务中执行,这可以将存储过程的执行与程序的其他逻辑分离,进而提高程序的响应速度。

    总之,可以通过代码优化、存储过程优化、数据库参数调整以及采用缓存技术和异步技术等手段,来提高存储过程的执行效率,从而优化程序性能。

    下面是一个简答的优化版本:

    // 封装一个类来处理数据库连接
    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,如何解決?