使用Codeigniter在查询数据库上的性能

时间:2015-04-25 00:07:49

标签: codeigniter

我正在寻找一种方法来获得使用查询从数据库获取数据的最佳性能,我的主要问题是,通过执行下一个查询示例,它会给我一个可以解决的错误Message: preg_match(): Compilation failed: regular expression is too large at offset 44123PCRE library backtracking limit options添加到php,ini

它将解决我的服务器/托管上的问题,但如果许多用户将使用它将解决其他问题。

我的查询非常简单:

我有一个5k行的数组:

$data = array(
  array('product_id' => 1),
  array('product_id' => 2),
  ++ 4998
);

我需要做一个foreach来获取产品ID并向数据库询问它并插入一些数据(如果存在)如果不存在它会返回不存在的product_id,所以我将它存储在一个数组中。

//Controller Method
    function test(){
        foreach($data as $row){
            $exist[] = $this->Model->AskDatabase($row->product_id);
        }

        if($exist){
            $getExistents = $exist;
        }

        if(!$getExistents == null){
             //And here is where the error is produced "regular expression is too large"
            $this->db->select('*')->from('products_2')->where_in('product_id', $getExistents)-get();
        }
    }

    //Model Method
    function AskDatabase($product_id){
        $exist = $this->db->select('id')->from('products')->where('product_id', $row->product_id)-get();

        if($exist->num_rows() > 0 ){
          return $exist->row()->id;
        }else{
          return false;
        }
    }

最好使用'where'条件再次执行foreach循环而不是where_in?还是有另一种方法可以在执行查询时获得更好的性能?

感谢任何帮助!

0 个答案:

没有答案