Codeigniter多个数据库连接速度慢

时间:2013-01-30 04:13:28

标签: php mysql codeigniter codeigniter-datamapper

在我的一个codeigniter项目中,我想连接多个数据库。我连接到多个,它的工作正常。

这是一个更新 - 大项目。意味着需要重构和从多个数据库中获取数据等。

由于它的大,其现有的数据库查询如下

model.php

    $res=mysql_query("select * from news order by date DESC LIMIT 0,10");
    while($r=mysql_fetch_array($res)){
          echo '<li><div class="newshead"><a href="'.site_url('movie-news/'.$r['id'].'/'.$r['seo']).'">'.$r['heading'].'</a></div><img alt="'.$r['heading'].'" align="left" src="share/news/'.$r['thumb'].'" /><p>'.stripslashes(strip_tags(substr($r['news'],0,150))).'</p><br/> <a class="readmore" href="'.site_url('movie-news/'.$r['id'].'/'.$r['seo']).'">Read More</a></li>';
         }

所以我在config中添加了2个数据库,并像这样连接到db

    $this->load->database('default', TRUE);
    $res=mysql_query("select * from news order by date DESC LIMIT 0,10");
    while($r=mysql_fetch_array($res)){
             echo '<li><div class="newshead"><a href="'.site_url('movie-news/'.$r['id'].'/'.$r['seo']).'">'.$r['heading'].'</a></div><img alt="'.$r['heading'].'" align="left" src="share/news/'.$r['thumb'].'" /><p>'.stripslashes(strip_tags(substr($r['news'],0,150))).'</p><br/> <a class="readmore" href="'.site_url('movie-news/'.$r['id'].'/'.$r['seo']).'">Read More</a></li>';
    }

获得了数百个这样的查询功能。我的实际问题是在构造函数中添加/连接数据库,我将数据库添加到每个函数中。从那里,它将被告知从哪个数据库获取数据。

是否会影响网站的性能(如果我从每个功能连接到数据库)

其实我这样编码

Class Tickets extends CI_Model {

    function __construct() {
        parent::__construct();
         $this->db =$this->load->database('users', TRUE);
         $this->gen = $this->load->database('default', TRUE);
    }


function getSlidingThumb(){
    $this->gen->select('*');
    $this->gen->from('front_slide');
    $this->gen->order_by("id", "ASC");
    $query = $this->gen->get();
    $thumbs = $query->result();

    foreach($thumbs as $thu){
       echo '<li><a href="javascript:;"><img  src="share/home/t-'.$thu->image.'" alt="'.$thu->title.'" width="45" height="23" border="0"/></a> </li>'; 

    }
  }

在这种情况下,我需要在构造函数中将db连接一次并像这样查询。 $ query = $ this-&gt; gen-&gt; get();

但为此,我需要编辑100个现有功能

请告诉我我更喜欢哪个选项。客户需要性能和快速加载

1 个答案:

答案 0 :(得分:2)

您是否可以配置数据库,以便CodeIgniter中配置的默认用户可以访问所有这些数据库?如果是,您可以将数据库作为参数传递并在查询中使用它:

修改您的模型:

Class Tickets extends CI_Model {

    public function __construct() {
        parent::__construct();
    }

    public function getSlidingThumb ($db = 'default') {
        $this->db->select('*');
        $this->db->from("$db.front_slide");
        $this->db->order_by("id", "ASC");
        $query = $this->db->get();

        return $query->result();

    }
}

为了清楚起见并尊重MVC模式,请将HTML移至视图:

<?php foreach ($thumbs as $thu) : ?>
    <li><a href=""><img src="share/home/t-<?php echo $thu->image;?>" alt="<?php echo $thu->title;?>" width="45" height="23" border="0" /></a></li>
<?php endforeach;?>