해시 인덱스는 언제 합리적인가?


4

MySQL은 기본적으로 해시 인덱스를 지원하지 않습니다.따라서 의사 해시 열을 만들고 해시 열에 인덱스를 만드는 것은 약간의 사고가 필요합니다.

그리고 텍스트 필드가 길면 해시가 필요한 오버 헤드의 가치가 있다는 것을 널리 알 수 있습니다.그러나 텍스트가 해쉬에 대해 얼마나 오랫동안 생각해야할까요?

128 비트 해시를 사용하려는 경우 문안 임계 값이 텍스트 열에 대한 최소값으로 얼마나됩니까?

편집하다내 다른 질문에 나열된 세부 정보가 유용 할 수 있습니다.https://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram

  0

귀하의 요구 사항은 무엇입니까?인덱스는 쿼리 최적화 프로그램에서 사용할 쿼리가있을 때만 작동합니다.문제가되는 데이터의 성격은 무엇입니까?이 데이터와 관련된 어떤 유형의 쿼리를 수행 할 예정입니까? 14 sep. 112011-09-14 18:18:53

  0

다음은 프로젝트에 대한 설명입니다. http://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram 14 sep. 112011-09-14 18:49:42

3

디스크를 저장하기 시작할 때 디스크가 적당 해지기 시작합니다.그러나 동시에 계산 능력을 사용하기 시작합니다.

요즘 디스크 공간은 싼 것으로 간주되지만 SSD를 사용한다면 그다지 저렴하지는 않습니다.정확한 일치가 필요하므로 너무 많은 CPU를 차지하지 않으므로 더 나은 옵션 일 수 있습니다.

해시 사용을 만족시키기위한 텍스트 열의 길이에 대한 정확한 대답은 DBA의 기술에서 시스템에로드하는 많은 요인에 따라 달라질 수 있습니다.

그러나 해시를 사용하는 RAM의 50 % 이상을 저장하고 총 RAM을 절약하는 것이 최소 2GB 이상이면이 경로를 사용하지 않으면 불필요한 리허설을 할 가치가 있다고 생각합니다.


3

나는 해시 인덱스를 원한다는 이유가 무엇인지 잘 모르겠습니다.

그러나 text/varchar 컬럼을 인덱싱 할 경우 MyISAM/full-text를 사용하거나 Sphinx 나 Lucene과 같은 외부 텍스트를 사용할 수 있습니다.

또는 해시 버전의 다른 버전과 추가로 1000 바이트 이하의 추가 열을 만들 수 있습니다. 그런 다음 MySQL에서 색인을 생성 할 수 있습니다.

나는 당신의 질문에 대답했기를 바랍니다.

  0

의사 해시 인덱스를 찾는 이유는 내 테이블에 150 만 개가 넘는 레코드가 포함되어 있고 메모리 (8GB)가 제한되어 있으므로 인덱스를 최적화하고 텍스트 열에 인덱스를 넣지 않으려 고하므로 너무 많이 먹게됩니다. 램. 14 sep. 112011-09-14 17:55:51

  0

색인 할 텍스트 열의 문자 수를 지정할 수 있습니다.mytextcolumn (1000)에서와 같이 - 1000이 한계입니다.나는 MySQL이 메모리 부분을 아주 잘 처리하도록 처리 할 것이다.또는 이러한 것들을 위해 스핑크스를 사용하는 것이 아마도 가장 적합한 도구 일 것입니다. 15 sep. 112011-09-15 06:58:59

  0

해시 열을 만들고 해시 열에 고유 제한 조건을 넣는 대신 변수 길이가있을 때 텍스트 열에 인덱스를 두어야하는 이유는 무엇입니까?해시 컬럼에 인덱스를 두는 것만으로 충돌을 가능한 한 최소화합니다. 15 sep. 112011-09-15 16:42:11

  0

다른 해시 된 열을 생성하고 색인을 생성 할 수있을뿐만 아니라 응용 프로그램에 코드를 추가하여 검색 할 수 있습니다.나는 이것이 다른 도구를 사용하여 이미 해결되었으며 다른 사람들에 의해 대부분 검증 된 문제라고 말하고 싶습니다.당신의 방식이 효과가 있고 덜 복잡하다는 것을 알고 싶다면, 제 모든 것을 시도해보십시오. 16 sep. 112011-09-16 10:41:14

  0

실제로 이러한 도구는 스핑크스와 같은 전문 검색 솔루션을위한 도구입니다.그러나 16 바이트의 해시를 수행하는 것이 언제 가능 해지는 지 알고 싶습니다.마찬가지로, 100 바이트의 텍스트 열을 저장하는 대신 (인덱스를 추가 할 때) 16 바이트를 사용할 가치가 있습니다.그리고 가장 중요한 점은 범위 검색이 아닌 정확한 일치 만 필요하다는 것입니다. 16 sep. 112011-09-16 18:45:01


0

설명을 읽었을 때 해시가 어떻게 의미가 있는지 알 수있었습니다.그러나 메모리 사용에 관해 이야기 할 때 인덱스 열의 크기가 큰 데이터 집합을 검색하는 것이 불가능하지는 않습니다.mysql의 기본 인덱스 기술은 btree이다.Btrees는 분열하고 정복한다.

내가 드릴 수있는 구체적인 조언은 다음과 같습니다. md5() 해시를 사용한다고 가정 해 보겠습니다.효율성을 극대화하려면 해시가 char (32) 인 innodb 엔진 테이블의 기본 키로 해시를 만들어야합니다.innodb는 클러스터 된 인덱스를 가지고 있기 때문에 데이터를 검색하면 디스크 읽기가 절약되고 md5() 해시의 결과는 변경되지 않으므로 수행 할 수 있으므로 char을 사용할 때 수행해야하는 작업이 줄어 듭니다 .

  0

RAM을 절약하는 것이 목적이라면 InnoDB를 사용하는 것이 현명한 결정일까요? 15 sep. 112011-09-15 16:44:51