2013-03-14 52 views
0

我正在嘗試查詢時間縮短。我正在使用codeigniter ...查詢表中的記錄是100或更少...查詢是2毫秒。一個查詢那從表中獲取1分的記錄,並具有2 where語句正在35毫秒...表中有5000條記錄...通過添加索引對查詢時間的影響

 $this->db -> where ('DealSiteId', $q1['DealSiteId']); 
     $this->db -> where ('DealUniqueId',$q1['DealUniqueId']); 

     $dup= $this-> db -> get ('deals'); 
     $dup1 = $dup -> result(); 


     if (count($dup1)!=0){ 

      $data['error']="Duplicate, This deal already exists. "; 
      return $data; 
     } 

我在where子句中......指數型這兩個字段添加索引BTREE。任何更快的方式來檢查重複?

回答

0

如果您創建了包含兩個字段的複合索引,那麼您的查詢可以使用單個索引使其更有效。

0

您是在兩個字段還是一個字段中添加單個索引?

無論哪種方式,你應該在MySQL(或類似phpMyAdmin的)直接測試您的查詢,並使用EXPLAIN看看發生了什麼:http://dev.mysql.com/doc/refman/5.5/en/explain.html

在你特定的情況下,你也許可以添加一個unique索引/約束爲DealSiteIdDealUniqueId的組合。這看起來是這樣的(未經測試,只是給你一個想法...):

ALTER TABLE `deals` ADD UNIQUE `some_name` (`DealSiteId` , `DealUniqueId`); 
0

任何簡單的方法來確定,如果你的查詢是儘可能有效的使用MySQL EXPLAIN。要笨內做到這一點,你可以做到以下幾點:

$this->db->where('DealSiteId', $q1['DealSiteId']); 
$this->db->where('DealUniqueId',$q1['DealUniqueId']); 

$result = $this->db->get('deals'); 
echo $this->db->last_query(); 

採取的打印結果,並運行它在MySQL命令:EXPLAIN <your query>,這會告訴你有關的查詢,這將是非常有用的信息。即如果它正在使用索引,它掃描的行數,是否使用排序,創建臨時表等等。從那裏你可以優化你的查詢以獲得最好的結果。