이것은 가능한 최선의 최적화 된 방법으로 생각하고 올바른 생각을하는 데 더 많은 시간을 낭비하는 문제입니다."해시 태그"시스템을 만드는 가장 좋은 방법
"Contents"테이블이 있으며 "해시 태그"또는 "태그"또는 "키워드"를 콘텐츠에 연결하는 옵션을 추가해야합니다. 예를 들어 "튀긴 감자와 케첩"과 같은 콘텐츠는 "열쇠": "감자", "케첩", "튀김".
단어로 검색하면 (예 : "감자"),이 단어에 태그가있는 콘텐츠를 표시해야합니다.
질문은 콘텐츠 테이블이 Millon 행 30 개 이상인 MyISAM이므로 결과의 속도를 고려하여이 작업을 수행하는 데 가장 적합한 구조입니다.
내가이 생각 :
2 개 이상의 테이블을 확인, "contents_hashtags"
사용자가 생성/테이블 내용을 수정 이노
에서(id(INT11), content_id(INT11), hashtag_id(INT11))
와 "해시 태그"
(id(INT11), hashtag(VARCHAR(40)))
2 테이블, 난에서 검색 해시 태그 테이블을 생성하고 존재하지 않는 해시 태그가있는 경우 해시 태그 테이블에 생성하고 ID가 있으면이 ID를 사용하여 테이블에 삽입합니다 contents_hashtas 내용을 연관 시키십시오 < -contents_hashtas-> hashtahs
검색 할 때 JOINS (LEFT/RIGHT/INNER 젠체하는 ..)와 같은 검색을 만들 ?? exact (hashtag = "XXX") 또는 전체 텍스트 검색?
이 방법이 정확하고 빠릅니까? 나는
이
필요한 설정 어떤 방법이 검색에 빨리입니까? 3 테이블 또는 2 테이블 방법? 3 테이블 메서드는 JOIN에 의한 직접적인 관계이지만 2 테이블 메서드에서 해시 태그는 내용에 대해 "복제"됩니다 (id + hashtag 캔트 반복). 예를 들어 search : content.active = 1 AND (내용 .name = 'xxx'또는 (Contags.hashtag = 'XXX'및 Content.id = Contags.content_id)) – Zenth
Upvoted "또는 Hashtags Name 및 ContentId를 고유 키로 설정". 3 개의 테이블 2가 필요하지 않습니다. – DeepBlue