账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    ShardingJDBC:查询逻辑表为什么会进行全表搜索
    40
    0
    PositionController.java@Controller@RequestMapping("/position")public class PositionController { @Autowired private PositionRepository positionRepository; @Autowired private PositionDetailRepository positionDetailRepository; @ResponseBody @RequestMapping("/insert") public void insert() { for (int i = 1; i <= 20; i++) { Position position = new Position("Manager"); positionRepository.save(position); Long positionId = position.getId(); PositionDetail positionDetail = new PositionDetail(positionId, "Description"); positionDetailRepository.save(positionDetail); } } @RequestMapping("/find") public void find() { Object object = positionRepository.find(661547422605901824L); Object[] objectArray = (Object[])object; BigInteger id = (BigInteger)objectArray[0]; String name = (String)objectArray[1]; String description = (String)objectArray[2]; System.out.println(id); System.out.println(name); System.out.println(description); }}Position.java@Entity@Table(name = "POSITION")public class Position { @Id @Column(name = "ID") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "NAME") private String name; // 省略构造方法、Getter、Setter}PositionDetail.java@Entity@Table(name = "POSITION_DETAIL")public class PositionDetail { @Id @Column(name = "ID") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "POSITION_ID") private Long positionId; @Column(name = "DESCRIPTION") private String description; // 省略构造方法、Getter、Setter}PositionDetailRepository.javapublic interface PositionDetailRepository extends JpaRepository<PositionDetail, Long> {}PositionRepository.javapublic interface PositionRepository extends JpaRepository<Position, Long> { @Query(nativeQuery = true, value = "SELECT P.ID, P.NAME, D.DESCRIPTION FROM POSITION P JOIN POSITION_DETAIL D ON P.ID = D.POSITION_ID WHERE P.ID = :id") public Object find(@Param("id") Long id);}application.propertiesspring.profiles.active=sharding spring.shardingsphere.props.sql.show=trueapplication-sharding.properties# datasourcespring.shardingsphere.datasource.names=shard0,shard1spring.shardingsphere.datasource.shard0.type=com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.shard0.driver-class-name=com.mysql.jdbc.Driverspring.shardingsphere.datasource.shard0.jdbc-url=jdbc:mysql://localhost:3306/database1spring.shardingsphere.datasource.shard0.username=rootspring.shardingsphere.datasource.shard0.password=123456spring.shardingsphere.datasource.shard1.type=com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.shard1.driver-class-name=com.mysql.jdbc.Driverspring.shardingsphere.datasource.shard1.jdbc-url=jdbc:mysql://localhost:3306/database2spring.shardingsphere.datasource.shard1.username=rootspring.shardingsphere.datasource.shard1.password=123456# sharding-databasespring.shardingsphere.sharding.tables.position.database-strategy.inline.sharding-column=idspring.shardingsphere.sharding.tables.position.database-strategy.inline.algorithm-expression=shard${id % 2}spring.shardingsphere.sharding.tables.position_detail.database-strategy.inline.sharding-column=position_idspring.shardingsphere.sharding.tables.position_detail.database-strategy.inline.algorithm-expression=shard${position_id % 2}# idspring.shardingsphere.sharding.tables.position.key-generator.column=idspring.shardingsphere.sharding.tables.position.key-generator.type=SNOWFLAKEspring.shardingsphere.sharding.tables.position_detail.key-generator.column=idspring.shardingsphere.sharding.tables.position_detail.key-generator.type=SNOWFLAKE请求 ...8080/position/insert 测试添加数据,符合预期database1.position 数据量 10database1.position_detail 数据量 10database2.position 数据量 10database2.position_detail 数据量 10请求 ...8080/position/find 测试查询数据,不符预期Actual SQL: shard0 ::: SELECT P.ID, P.NAME, D.DESCRIPTION FROM position P JOIN position_detail D ON P.ID = D.POSITION_ID WHERE P.ID = ? ::: [661547422605901824]Actual SQL: shard1 ::: SELECT P.ID, P.NAME, D.DESCRIPTION FROM position P JOIN position_detail D ON P.ID = D.POSITION_ID WHERE P.ID = ? ::: [661547422605901824]我的疑问教程中的查询结果仅查询 shard0 即可,无需查询 shard1,但我实测时通过日志可知会查询完 shard0,再去查询 shard1,请问是为什么呢?并没有根据我的 ID 进行分片查找相应的库
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部