database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 30817 게시물 읽기
No. 30817
읽지않은 게시물의 개수와 게시물 구하기
작성자
익명
작성일
2015-01-13 14:04
조회수
5,722

읽지않은 게시물의 개수를 알려주고 읽지안은 게시물을 리스트로 보여주는 알림기능을 만들고 있습니다.

 

A라는 게시물 테이블이 있으면 B라는 체크테이블에 회원아이디와 게시물 인덱스번호를 저장하고

select from A left outer join B on A.idx=B.p_idx and B.id=$_SESSION[mem_id] where B.p_idx is null

 

이렇게 조인을 했습니다. 문제는 속도가 너무 느립니다.

모든 회원들이 게시글을 볼때마다(중복체크는 해줬습니다) 전부다 B라는 체크테이블에 저장이 되니 B테이블은 레코드수가 급격하게

증가하고 B테이블을 모두 읽어오고 난 후 처리가 되는거 같습니다. 해서 너무 느린데 다른 방법은 없을까요??

 

체크테이블인 B테이블에

p_idx | id

1 | aaa,bbb,ccc

2 | aaa,ccc,ddd,eee

3 | aaa,ccc,hhh

이렇게 게시글의 인덱스번호를 저장하고 게시글을 본 회원을 한필드에 저장한 후 쿼리로 가능할까요?

 

보통 이런걸 만들때에는 어떤 방식으로 하는지 알고싶습니다. 도와 주세요..

이 글에 대한 댓글이 총 1건 있습니다.

 글쎄요. 일반적으로 어떻게 풀어내는진 모르겠으나, 뒷 부분에 적으신 방법은 일반적으로 안 좋은 방법입니다.

 

처음 적으신 질의에 INDEX는 적절히 걸려있는 것이죠? B 테이블에 INDEX(id, p_idx), A 테이블에 INDEX(p_idx)가 걸렸는데도 많이 느리다면...

 

쉽게 떠오르는 방법은 날짜 조건을 줘서 검색할 범위를 줄이는 방법밖에 없을 듯 합니다. 예를 들어, 뽐뿌를 내가 읽은 글에 댓글이 달리면 알림을 주는데 최근 1주일이던가. 최근 한달이던가. 조건이 있습니다.

 

이 방법이 아니라면 B 테이블을 회원 id로 partition을 한다던가, 혹은 A, B를 idx로 partition을 한다던가하는 방법도 있겠습니다만 관리 측면에서는 위처럼 날짜 조건 넣는 것이 편할 듯 싶습니다. (물론 좋은 방법은 아니지만... 현실적으로 따졌을 경우죠) 

허정수(wertyu)님이 2015-01-13 20:48에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
30820VIEW 와 TABLE 를 어떻게 구분할 수 있나요? [1]
2015-01-29
5141
30819반복적인 특정 문자열 카운트찾기. [1]
정재원
2015-01-23
5588
30818다중 update 궁금합니다.
Devyg
2015-01-20
5217
30817읽지않은 게시물의 개수와 게시물 구하기 [1]
익명
2015-01-13
5722
30816데이터가 아래와 같이 있으면 중복안되게 출력하고 싶어요.ㅠㅠ [1]
정우혁
2014-12-30
5579
30815Mysql 업데이트 구문 관련해서 질문드립니다. [2]
손님
2014-12-22
5917
30812[mysql] 행을 열로 변환 하는 방법 문의 드립니다.ㅠㅠ [1]
장창영
2014-12-19
9955
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.070초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다