(메모리 캐싱 이외에) 빠른 검색을 제공해야하는 일련의 고유 한 문자열을 포함하는 테이블이 있습니다. Hibernate 테이블에서 고유 한 문자열을 빠르게 검색하는 방법
@Entity
public class UniqueString {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Basic
@NaturalId
private String stringId;
}
처음에 나는, 그러나 그것은 문자열 ID로 객체를 검색 할 때 일부 데이터베이스 (예를 들어, 오라클)
full table scan
에 들어간 것으로 밝혀졌다,
@Id
로
stringId
변수를했다; 그래서 나는 대신에 길게 바꿨다.
문자열 stringId
에서 UniqueString
개체에 신속하게 액세스 할 수 있습니까? 다시 말하지만, @id
와 stringId
주석을 달고 (정밀도를 잃어버린 동안) full table scans
는 long
에 일부 데이터베이스에
- : 나는 두 가지 솔루션 지금까지 참조 표를 사용하여 해시와 일치하는 모든 객체를 반환 한 다음
stringId
속성을 비교하면 일치하는 항목을 찾을 수 있습니다 (예 :
).
LookupTable UniqueString
+----+------+ +----+----+----------+
|hid | hash | | id |hid | stringId |
+----+------+ +----+----+----------+
| 1 | 123 | -------------> | .. | 1 | .... |
| 2 | 321 | `-----> | .. | 1 | .... |
+----+------+ +----+----+----------+
의견, 제안?
[편집] 좋아, 내 위의 표 그림은 단순히
UniqueString
+----+-----+----------+
| id |hash | stringId |
+----+-----+----------+
| .. | 123 | .... |
| .. | 123 | .... |
| .. | 321 | .... |
+----+-----+----------+
나는 다음과 같은 쿼리 모두 거의 같은 수행 할 생각으로이 모든 차이에 정상화 될 수 있다는 것을 깨닫게 :
from UniqueString where hash='123'
from UniqueString where stringId='abc'