让CrudRepository使用DB的索引

时间:2017-08-24 12:59:11

标签: java postgresql spring-boot indexing

我正在使用spring boot开发rest api服务,所以我在db(postgres)中有下表

CREATE TABLE users
(
  id serial NOT NULL,
  name text,
  surname text,
  email text,
  password text,
  phone_code text,
  phone_number text,
  user_key text NOT NULL,
  registration_push_notification_id text,
  os_type text,
  bonuses integer,
  phone_number_verified boolean DEFAULT false,
  email_verified boolean DEFAULT false,
  active boolean DEFAULT false,
  car_mark text,
  car_body text,
  car_number text,
  settings jsonb,
  registration_time timestamp with time zone NOT NULL,
  blocked boolean DEFAULT false
}

关注界面public interface UserRepository extends CrudRepository<Users,Integer>

现在我向db添加一些索引,如

CREATE INDEX user_id
  ON users
  USING btree
  (id);

为了测试它我用简单的结构写了简单的休息控制器

public String test(@PathVariable id){
        long before = System.currentTimeMillis();
        repository.findOne(id);
        long after = System.currentTimeMillis();
        System.out.println("Time is: "+(after-before));
    }

问题是:创建索引之前和之后此方法显示相同的结果,在用户表中几乎有100000行。而且这个脚本

explain select * from users where id =4

在索引

之前显示以下内容
"Seq Scan on users  (cost=0.00..12 rows=1 width=432)"

在索引之后

"Seq Scan on users  (cost=0.00..1.05 rows=1 width=432)"

如何检查spring boot是否在方法findOne(Integer in?)中使用此索引?

0 个答案:

没有答案