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。有更快的方法来检查重复项吗?

4

3 回答 3

0

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

于 2013-03-14T16:42:15.590 回答
0

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

于 2013-03-14T16:32:12.827 回答
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` );
于 2013-03-14T16:32:28.453 回答