MySQL에서 텍스트 필드를 인덱싱하거나 검색 가능하게 만드는 방법은 무엇입니까?
저는 약 700만 개의 생물학적 단백질 배열을 저장했습니다.text
MySQL 테이블 필드(사용)InnoDB
스토리지 엔진 및latin1_swedish_ci
대조).
MySQL에 저장된 시퀀스는 대문자로 된 간단한 영어 알파벳 조합입니다.다음과 같이:
MSTWQVYRLLMEYCSCLDNKTPNAFAKWCSSRKIKFLQADYFRKRPKHCDEGTGRYRSIYVMKKEYLGDIVRKITN
의 선택text
MySQL의 필드는 시퀀스가 최소 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
'programing' 카테고리의 다른 글
Angular 2 구성 요소 @입력이 작동하지 않음 (0) | 2023.08.09 |
---|---|
TNSPING은 괜찮지만 sqlplus는 ORA-12154를 제공합니까? (0) | 2023.08.09 |
객체 리터럴로 선언된 녹아웃 뷰 모델과 함수 간의 차이 (0) | 2023.08.04 |
Android - 텍스트에 그림자? (0) | 2023.08.04 |
Oracle에서 IFELL 사용 (0) | 2023.08.04 |