본문 바로가기
플랫폼엘 정리or해석

DB 조회시 인덱스 기능

by shulk 2024. 8. 5.

알겠습니다. Spring 프로젝트에서 데이터베이스 쿼리를 실행할 때 JPQL을 이용하는 방법과 MyBatis를 이용하는 방법을 각각 설명하고, 인덱스 설정 및 활용 예시도 함께 제공하겠습니다.

JPQL을 이용할 때

인덱스 설정

데이터베이스 테이블에 인덱스를 설정하려면 SQL을 사용합니다. 예를 들어, MySQL 데이터베이스에서 users 테이블의 username 컬럼에 인덱스를 추가하려면 다음과 같은 쿼리를 실행합니다.

sql
CREATE INDEX idx_username ON users(username);

JPQL로 조회

Spring Data JPA를 사용하여 JPQL을 이용해 데이터를 조회할 수 있습니다.

 

1.엔티티 클래스 정의:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String email;

    // Getters and Setters
}

 

2.리포지토리 인터페이스 정의:

public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.username = :username")
    User findByUsername(@Param("username") String username);
}
 
3.서비스에서 조회:
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User getUserByUsername(String username) {
        return userRepository.findByUsername(username);
    }
}

MyBatis를 이용할 때

인덱스 설정

데이터베이스 테이블에 인덱스를 설정하는 방법은 JPQL을 이용할 때와 동일합니다.

sql
CREATE INDEX idx_username ON users(username);

MyBatis로 조회

MyBatis를 사용하여 데이터를 조회하는 방법은 다음과 같습니다.

1.매퍼 XML 파일 정의 (UserMapper.xml):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.mapper.UserMapper">
    <select id="findByUsername" parameterType="string" resultType="com.example.model.User">
        SELECT * FROM users WHERE username = #{username}
    </select>
</mapper>

 

2.매퍼 인터페이스 정의:

public interface UserMapper {
    User findByUsername(@Param("username") String username);
}

 

3.MyBatis 설정 파일 (mybatis-config.xml):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml" />
    </mappers>
</configuration>

 

4.서비스에서 조회

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User getUserByUsername(String username) {
        return userMapper.findByUsername(username);
    }
}

인덱스 설정 및 조회 성능 최적화

인덱스는 조회 성능을 최적화하기 위해 테이블의 특정 컬럼에 설정합니다. 일반적으로 자주 검색하거나 조인 조건에 사용되는 컬럼에 인덱스를 설정합니다. 인덱스를 설정하면 데이터베이스가 해당 컬럼의 값을 기반으로 빠르게 검색할 수 있습니다.

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

이와 같이, 인덱스를 설정하고 이를 활용하여 JPQL과 MyBatis를 통해 데이터를 효율적으로 조회할 수 있습니다. 인덱스를 적절히 설정하면 데이터베이스의 조회 성능을 크게 향상시킬 수 있습니다.

 

<추가>

페이징에서 ofset을 이용할시 데이터가 엄청나게 많은경우 성능 저하가 발생한다. 이때는 마지막으로 넘겨준 데이터 정보로 페이징 하는게 서능에 훨배 좋다 

참고사이트