簡體   English   中英

如何優化Code​​Igniter中的插入(插入速度更快)

[英]How to optimze insert in CodeIgniter (insert faster)

我想創建一個表,其中所有鏈接都位於另一個表中,但是過程太慢了,我正在使用CodeIgniter進行此操作,並且我想知道是否有更好的方法可以做到這一點。

這是我的代碼:

foreach($results as $value) { 
        $ci->db->select('id');
        $ci->db->where('url', $value->Url);
        $link = $ci->db->get('links')->row();

        if(@!$link) {
            $ci->db->insert('links', array(
                'title' => $value->Title,
                'url' => $value->Url,
                'description' => $value->Description,
                'is_featured' => 0,
                'published_date' => date('Y-m-d h:i:s')
            ));
            $link_id = $ci->db->insert_id();
        } else {
            $link_id = $link->id;
        }


        $ci->db->where('link_id', $link_id);
        $ci->db->where('term_id', $term_id);
        $term_links = $ci->db->get('term_links')->row();

        if(!$term_links) {
            $ci->db->insert('term_links', array(
                'link_id'=>$link_id, 
                'term_id'=>$term_id,
                'order_link'=>$order,
                'duplicates'=>0
            ));
        } else {
            $ci->db->where('id', $term_links->id);
            $ci->db->update('term_links', array('duplicates'=>$term_links->duplicates+=1));
        }

        $order++;
    }

任何想法? 我使用activerecords代替SQL。

先感謝您!

最快的機制是寫出文本文件CSV並執行LOAD DATA INFILE。 通常,它會進入一個首先清除的工作表。 然后,該表收到一個調用,要求插入realTable(col1,col2等),然后從workTable中選擇col1,col2等。

這是最快的方法。

因此,有2個電話。 如果第二個調用是具有連接模式的插入,那很好。

但是循環永遠是緩慢的道路。

使用此策略將大大減少執行循環。

CI可以通過原始查詢執行此操作。 因此,與ORM的任何斗爭都容易避免。

好吧,您沒有執行單個插入語句,而是在循環中執行了許多插入和更新語句。 考慮將代碼更改為用戶insert_batch

插入批處理將生成查詢並立即運行所有查詢,而不是多個單獨的查詢。 這樣可以通過兩種方式加快處理速度。 第一:PHP和DB之間只有一次來回通信,而不是幾次。 第二:索引更新僅發生一次,而不是多次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM