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


Effect on query time by adding indexes

我正试图获得查询时间下来。我正在使用codeigniter…表中记录小于等于100条的查询…查询耗时2毫秒。一个查询从表中获得1条记录,其中有2条语句占用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。有更快的检查副本的方法吗?

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

您是在两个字段上添加单独的索引还是一个组合的索引?

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

在您的特定情况下,您可以为DealSiteIdDealUniqueId的组合添加unique索引/约束。它看起来像(未经测试,只是给你一个想法…):

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

确定查询是否尽可能高效的任何简单方法都是使用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>运行它,这将告诉您有关该查询的有用信息。例如,如果它使用索引,扫描多少行,如果它使用排序,创建临时表,等等。从那里,您可以优化您的查询,以获得最佳结果。