테스트 사이트 - 개발 중인 베타 버전입니다

db설계 랑 쿼리문 질문..!! 채택완료

별이님 9년 전 조회 2,766

십만이상 고객이 있고 고객별로 100개 이상 결제 건이 등록이 되어야 합니다.

고객 x 결제건 = 천만

이렇게 될텐데 mysql myisam 으로 문제가 없나요?

현재 십만개를 등록하니 벌써 30메가나 됩니다.

 

그리고 아래와 같이 테이블이 만들어져 있을 때 통합검색이 되어야 하는데 셀렉팅을 어떻게 해야할 지 모르겠습니다.

create table 테이블 (

 no int(11) not null auto_increment,

 date date not null,

 hp varchar(13) not null,

 memo varchar(255) not null,

 primary key(no)

);

 

select * from 테이블 where replace(hp,'-','') like '%7142%' or memo like '%7142%' order by date desc;

 

이렇게 검색하니 0.5초나 나오는데... 겨우 십만개인데 이정도면 천만이면 50초 걸리는건가요?ㅜㅜㅜㅜ

인덱스를 이래저래 걸어봐도 마찬가지인 건 인덱스가 안걸린다는 건데...

어떻게 해야할 까요??ㅜㅜ 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
p
9년 전

like '%7142%' 이 조건은 인덱스를 탈 수 없는 구조 입니다. 

해당 테이블 해당 필드에 fulltext 를 거세요

그리고 가급적이면 중복된 입력을 막기 위해 innoDB 로 가시는걸 추천드리구요.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

별이님
9년 전
SELECT * FROM 테이블 WHERE match(memo) against('abcd');//결과값 없음
SELECT * FROM 테이블 WHERE match(memo) against('바보멍청이');//결과값 없음

memo 필드에 값은 "바보멍청이 abcd 하하" 이렇게 저장되어 있고 fulltext 걸었는데...
왜 결과값이 없다고 나올까요??
테이블이랑 필드 utf8 이고요..ㅜㅜ

아니면 like %abcd% 검색처럼 구현 가능한 방법이 또 있을까요??

댓글을 작성하려면 로그인이 필요합니다.

p
9년 전
SELECT * FROM `테이블` WHERE MATCH(`memo`) AGAINST('abcd') IN BOOLEAN MODE) 로 해보세요
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인