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