유명인 사진 웹 사이트를 구축했습니다. 10 만 장의 사진을 찍은 후, 내 아마추어 기술이 나타나기 시작했고, 곧 연마해야합니다. 몇 가지 간단한 검색어가 반환하는 데 5-10 초가 걸립니다.MySQL 전체 텍스트 검색 및 조인
"사진"테이블 (캡션 및 제목), "사람"테이블, "키워드"테이블 및 "photoContributor"테이블을 검색하는 텍스트 상자 검색 기능이 있습니다. "사람"과 "키워드"에 대한 두 개의 관계형/연관성 테이블이 "photoPeople"및 "photoKeyword"라고합니다. 어쩌면
한 가지 가능한 사용자 검색 : "브래드 피트 안젤리나 졸리 선글라스 @MG"-이 함께 브래드와 안젤리나가 포함 된 모든 사진을 반환해야합니다, 어디 선글라스는 볼과 기여자 @MG에 의해 수행 될 수있다.
"LIKE"절을 "%"접두어로 사용하고 있기 때문에 "사진"테이블의 "캡션"및 "헤드 라인"필드에 INDEX를 사용할 수 없다는 것을 알게되었습니다. 필드는 "LONGTEXT"데이터 유형으로 설정됩니다. 이러한 필드에 인덱스가 없으므로 반환 시간이 많이 걸립니다. 따라서 "FULLTEXT"검색을 사용해야한다고 생각하고 현재 캡션 및 헤드 라인 필드를 VARCHAR (2000)로 설정할 수 있습니다. 가장 큰 캡션은 1991 자이며 여전히 "INDEX" 기능을 사용하면 속도가 빨라집니다. 나는 또한 검색에서 단어를 제거하는 부울 함수를 좋아한다.
내가이 질문을 쓰는 이유는 "JOINS"에서 완전히 쓸모가 없다는 것입니다. 아마도 하나의 테이블에 "FULLTEXT"쿼리를 작성할 수 있으며 아마도 왼쪽 또는 오른쪽 조인을 사용하여 두 테이블을 함께 결합 할 수 있습니다 ... 그러나 연관성/관계형 테이블이 중간에 있기 때문에 정말 혼란 스럽습니다.
누군가가 조인과 전체 텍스트를 사용하고 관계형 테이블을 사용하여 예제 쿼리를 보여 주거나, 사용하는 조인 (있는 경우) 및 전체 텍스트에 대한 팁을 설명해 주시면 감사하겠습니다. 나는 데이터베이스 구조에있다.
아래는 내 기본 데이터베이스 스키마입니다 :
photos (tbl) photoID INT(11) Primary Auto-Increment headline Long-Text caption Long-Text dateCreated DateTime people (tbl) peopleID INT(11) Primary Auto-Increment people VarChar(255) photoPeople (tbl) photoID INT(11) peopleID INT(11) keywords (tbl) keywordID INT(11) Primary Auto-Increment keyword VarChar(255) photoKeyword (tbl) photoID INT(11) keywordID INT(11) photoContributor (tbl) photoID INT(11) contributorRef VarChar(100)
검색이 이루어지면, 조회되는 테이블/필드는 다음과 같습니다 photos.headline, photos.caption, keywords.keyword, people.people는, photoContributor.contributorRef.
누군가가 나를 도울 수 있기를 바랍니다. 긴급한 쿼리.
전체 텍스트 색인은 MyISAM 테이블에서만 작동합니다. 그들은 InnoDB에서 지원되지 않았습니다. (그리고 앞으로 나아갈 길은 아마 없을 것입니다.) –
내 테이블이 MyISAM 엔진을 사용하고 있습니다. 내 원인이 .. 도움이됩니까? – TheCarver