我试图让查询时间缩短。我正在使用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)
如果您创建了包含两个字段的复合索引,则您的查询可以使用单个索引,从而提高效率。
答案 1 :(得分:0)
您是在两个字段中添加单个索引还是在一个字段上添加单个索引?
无论哪种方式,您应该直接在mysql(或类似phpMyAdmin)中测试您的查询,并使用EXPLAIN
查看发生的情况:http://dev.mysql.com/doc/refman/5.5/en/explain.html
在特定情况下,您可以为unique
和DealSiteId
的组合添加DealUniqueId
索引/约束。这看起来像(未经测试,只是为了给你一个想法......):
ALTER TABLE `deals` ADD UNIQUE `some_name` ( `DealSiteId` , `DealUniqueId` );
答案 2 :(得分:0)
确定您的查询是否尽可能高效的任何简单方法都是使用MySQL EXPLAIN
。要在CodeIgniter中执行此操作,您可以执行以下操作:
$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>
运行它,这将告诉您有关该查询的信息。即如果它正在使用索引,它正在扫描多少行,如果它正在使用排序,创建临时表等。从那里你可以优化你的查询以获得最佳结果。