2011-11-02 1 views
2

db 테이블은 열 중 하나에 많은 이메일 주소를 저장합니다. 해당 열로 개별 주소를 조회하는 경우가 많으므로 해당 열에 대한 색인을 설정합니다. 전체 주소 만 검색되며, 부분 또는 LIKE는 검색되지 않습니다.저장/색인 생성 전에 REVERSE() 이메일 주소를 사용 하시겠습니까?

성능면에서 역순으로 주소를 저장하는 것은 '[email protected]'또는 '[email protected]'과 같이 직선으로 유지해야합니다.

+0

그래서, 반대로, 무엇 때문에? –

+0

Álvaro G. Vicario, 역순으로 된 인덱스 트리는 루트 brint가 적을 것이고 전체 구조가 더 빠를 것입니다. – Serge

답변

1

일부 이메일 도메인 (즉, @ 뒤의 부분)을 정기적으로 쿼리하는 경우 을 역순환하면이 색인 열에 의미가 있습니다.

DB를 엔진은이 같은 쿼리로 인덱스를 사용할 수있는이 방법 : 도메인을 포함

... WHERE ReverseMail LIKE REVERSE('.com') + '%' 

당신이 전체 도메인를 쿼리하면 대부분의 시간, 그냥 만들어 별도의 컬럼 만 이 색인을 생성하십시오. = 연산자에 대한 인덱스 조회는 LIKE 연산자에 대한 것보다 빠릅니다.

+0

전체 전자 메일 주소 만 검색합니다. 부품, 영역 또는 도메인이 없습니다. – Serge

+0

@Serg : 왜 그걸 뒤집고 싶습니까? 성능 문제가있는 경우 고려해야 할 두 가지 사항이 있습니다. ** a) ** 과도하게 엔지니어링하지 마십시오. 특정 DB 엔진에서 문자열 인덱스의 내부 동작에 대한 광범위한 지식이 없으면 거기에있을 수없는 문제를 영리하게 해결하지 마십시오. ** b) ** 확실하지 않은 경우 수백만 행의 테스트 케이스를 만들고 개별 타이밍을 찾으십시오. 내 생각은 별 차이가 없다는 것입니다. – Tomalak

+1

내 생각에 이메일 주소를 바꾸면 실제로 많은 접두사가 있기 때문에 검색 속도가 느려집니다 (약간). 그러나 @Tomalak이 썼 듯이 성능 문제에 대한 추측은 흥미롭지 만 유용하지는 않습니다. 실제 환경에서 테스트해야합니다. 그러나 나는 왜 당신이 이것에 당신의 시간을 보내고 싶어하는지 확신하지 못합니다. 실제 성능 문제가 있습니까? –

관련 문제