programing

MySQL에서 텍스트 필드를 인덱싱하거나 검색 가능하게 만드는 방법은 무엇입니까?

mailnote 2023. 8. 9. 20:57
반응형

MySQL에서 텍스트 필드를 인덱싱하거나 검색 가능하게 만드는 방법은 무엇입니까?

저는 약 700만 개의 생물학적 단백질 배열을 저장했습니다.textMySQL 테이블 필드(사용)InnoDB스토리지 엔진 및latin1_swedish_ci대조).
MySQL에 저장된 시퀀스는 대문자로 된 간단한 영어 알파벳 조합입니다.다음과 같이:

MSTWQVYRLLMEYCSCLDNKTPNAFAKWCSSRKIKFLQADYFRKRPKHCDEGTGRYRSIYVMKKEYLGDIVRKITN

의 선택textMySQL의 필드는 시퀀스가 최소 1바이트에서 최대 무제한/알 수 없는 바이트로 추세가 있기 때문에 필수적인 것으로 보입니다(최대 크기는 저장된 700만 레코드에서 23089였지만 미래의 레코드에서 이상적으로 확장될 것입니다).
MySQL의 varchar 또는 텍스트에 대한 최대 키 크기는 다음과 같습니다.767맨 처음에 가장 많이 떠났다는 뜻입니다.767바이트는 인덱싱할 수 있습니다.
LIKE연산자가 이 인덱스에서 효율적으로 검색할 수 없습니다.substring전체에서text들판.

그래서, 전체를 색인화할 수 있는 방법이 있나요?text내부의 서브스트링을 효율적으로 검색할 수 있는 필드?

여러분은 알파벳 단백질 서열로 기질을 저장하고 검색하기를 희망합니다.

MySQL / MariaDB의 검색 기능, 둘 다LIKE '%CSCLDNKTPNAFAKW%'그리고 FULLTEXT는 이 응용 프로그램에 적합하지 않습니다, 죄송합니다.

왜 안 되나요?

  • 검색 대상LIKE '%CSCLDN%'터무니없이 느릴 것입니다. (%LIKE 문자열은 와일드카드 연산자입니다.)또한 열에 있는 접두사 색인은 작업 속도를 높이는 데 도움이 되지 않습니다.

  • 전체 텍스트는 DNA 시퀀스를 나타내는 데 사용되는 긴 문자열이 아닌 자연어 단어 시퀀스에 대해 작동합니다.

포스트그SQL RDBMS에는 trigram 인덱스라는 기능이 있습니다.당신이 그것을 사용할 때 당신은 긴 TEXT 객체들을 검색할 수 있습니다.LIKE '%ACTG%'적절한 성능의 스타일 필터입니다.이와 같은 것을 사용하여 삼각형 인덱스를 선언할 수 있습니다.

CREATE INDEX CONCURRENTLY table1_text ON table1
       USING GIN (textcolumn, gin_trgm_ops)
       INCLUDE (col1, col2, col3);

하지만 그렇게 하기 전에 postgre를 사용하는 것으로 전환해야 합니다.SQL.

언급URL : https://stackoverflow.com/questions/72122832/how-to-index-a-text-field-or-make-it-searchable-in-mysql

반응형