添加索引对查询时间的影响

时间:2013-03-14 16:28:42

标签: php mysql codeigniter

我试图让查询时间缩短。我正在使用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。有没有更快的方法来检查重复项?

3 个答案:

答案 0 :(得分:0)

如果您创建了包含两个字段的复合索引,则您的查询可以使用单个索引,从而提高效率。

答案 1 :(得分:0)

您是在两个字段中添加单个索引还是在一个字段上添加单个索引?

无论哪种方式,您应该直接在mysql(或类似phpMyAdmin)中测试您的查询,并使用EXPLAIN查看发生的情况:http://dev.mysql.com/doc/refman/5.5/en/explain.html

在特定情况下,您可以为uniqueDealSiteId的组合添加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>运行它,这将告诉您有关该查询的信息。即如果它正在使用索引,它正在扫描多少行,如果它正在使用排序,创建临时表等。从那里你可以优化你的查询以获得最佳结果。