首页 > 根据主键查询两次那个效率高?

根据主键查询两次那个效率高?

表结构如下:

CREATE TABLE `country_area_relation` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `country_id` int(11) NOT NULL COMMENT '国家ID',
  `area_id` int(11) NOT NULL COMMENT '区域ID',
  `gmt_create` datetime NOT NULL COMMENT '@desc 创建时间',
  `creator` varchar(32) NOT NULL COMMENT '@desc 创建人',
  `modifier` varchar(32) NOT NULL COMMENT '@desc 修改者',
  `gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '@desc 修改时间',
  `is_deleted` char(1) NOT NULL DEFAULT 'n' COMMENT '@desc   是否删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=79 DEFAULT CHARSET=utf8 COMMENT='国家区域关系表';

现在要根据主键id查两次表取得数据,有两种方法,分别如下:
方法一:

CountryAreaRelationExample ex = new CountryAreaRelationExample();
CountryAreaRelationExample.Criteria criteria = ex.createCriteria();
criteria.andCountryIdIn(new ArrayList<Integer>(){{add(1);add(2);}});
List<CountryAreaRelation> list = countryAreaRelationMapperExt.selectByExample(ex);

方法二:

countryAreaRelationMapperExt.selectByPrimaryKey(1);
countryAreaRelationMapperExt.selectByPrimaryKey(2);

都是根据主键查,上述两种方法,哪种效率高?除此之外,还有更高效率的方法么?

=================================================================

补充测试结果:

SELECT * FROM idc_logistics_assign_rules WHERE id = '100';
SELECT * FROM idc_logistics_assign_rules WHERE id = '200';
//时间: 0.035s

SELECT * FROM idc_logistics_assign_rules WHERE id IN ('100','200')
//时间: 0.020s

第一种方法效率高,java语句不太熟,但是看转化的SQL,第一种方法应该是最优的。

in用不用索引?根据情况而定。即根据是否能够利用索引而定。当in的范围是聚集索引 in(1,2) 会被MSSQL自动优化成id=1 or id=2 ,你可以使用explain看下,他返回的row是2 in(1,2)与id=1 or id=2 explain返回的数据都是一样的。我可以很负责的告诉你是有用索引。网上很多提及不走索引的大部分都是旧资料,MSSQL2K以后已经优化了。

【热门文章】
【热门文章】