[英]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.