Mysql µ¥ÀÌÅͺ£À̽º Äõ¸® Áú¹®

djkneg883   
   Á¶È¸ 1222   Ãßõ 0    

아래와 같이 테이블이 2개 있을 때 사과, 맥주품목의 영수증번호를 뽑고 싶습니다.

SELECT 영수증번호 FROM 테이블 A ta INNER JOIN 테이블 B tb on ta.영수증번호 = tb.영수증번호 WHERE b.품목 = '사과' or b.품목 = '맥주';

위 처럼 쿼리를 날리면 결과가

쿼리결과: a, a , c , c, d

이렇게 나오는데 distinct 를 쓰지 않고 결과를 a,c,d만 뽑을 수 있도록하는 속도를 빠르게 할 수 있는 쿼리가 어떻게 될까요? 

원하는 결과: a, c, d

지금 단순하게 테이블을 작성해놨는데 칼럼이 여러개이고 데이터가 테이블A에 50만개정도 테이블 B에 150~500만개정도 쌓였을 때 distcint를 하고 order 를 쓰면 속도가 느릴것 같아서 여쭤봅니다.


테이블 A

영수증번호금액
a500
b1000
c2200
d3000


테이블 B

영수증번호품목
a사과
a맥주
b수박
c사과
c맥주
c포도
d사과
d키위
ªÀº±Û Àϼö·Ï ½ÅÁßÇÏ°Ô.
Zer0 2023-03
group by
     
Zer0 2023-03
±Ùµ¥ ¼ÓµµÂ÷À̳ª ¼º´ÉÀº º° Â÷À̾øÀ»µí Çϳ׿ä distinct¶û.
windfantasia 2023-03
group by 1Ç¥ Ãß°¡.
´Ù¸¥ Á¶°ÇÀÌ ¾ø´Ù¸é
SELECT DISTINCT ¿µ¼öÁõ¹øÈ£ FROM Å×À̺íB WHERE Ç°¸ñ IN ('»ç°ú','¸ÆÁÖ')

Á¶È¸ Á¶°Ç, INDEX ¿¡ µû¶ó Äõ¸®´Â ´Þ¶óÁö±â ¶§¹®¿¡
ÀÌ·¸°Ô ¹®ÀÇÇÏ½Ã¸é ¿øÇϽô ´äÀº ¹Þ±â Èûµå½Ç µí
¸ÓÇÏÁö 2023-03
EXISTS ?
ºÎ¸ð Å×À̺í Á¶È¸¿¡
ÀÚ½Ä Å×À̺í üũ Á¶°ÇÀ» Ãß°¡ÇÒ °æ¿ì
exists ¸¦ »ç¿ë Çϸé ÁÁÀº ¼º´ÉÀ» ³»´Â °æ¿ì°¡ ¸¹½À´Ï´Ù.
(¾Õ¿¡¼­ À̾߱⠵å·ÈµíÀÌ Á¶È¸ Á¶°Ç, INDEX¿¡ µû¶ó ´Þ¶óÁü)

SELECT ¿µ¼öÁõ¹øÈ£
FROM Å×À̺íA a
WHERE EXISTS (
SELECT 1
FROM Å×À̺íB b
WHERE b.¿µ¼öÁõ¹øÈ£ = a.¿µ¼öÁõ¹øÈ£
AND b.Ç°¸ñ IN ('»ç°ú','¸ÆÁÖ')
LIMIT 1
)
     
djkneg883 2023-03
³× Ç×»ó ÁÁÀº ´äº¯Áּż­ °¨»çÇÕ´Ï´Ù. Çѹø ½ÃµµÇغ¸°Ú½À´Ï´Ù!!
     
ÁÁÀº ´äº¯À» ´Þ¾ÆÁֽô±º¿ä.^^
´öºÐ¿¡ QnA°¡ dz¼ºÇØÁö°í ÀÖ½À´Ï´Ù.


QnA
Á¦¸ñPage 323/5686
2014-05   4974799   Á¤ÀºÁØ1
2015-12   1510998   ¹é¸Þ°¡
2003-01   12105   ±è±Ô¿ø
2003-12   12105   ÀÌ°ü¿õ
2011-03   12104   2CPUÃÖÁÖÈñ
2003-06   12104   Á¶°æÈÆ
2015-03   12104   ¹Ì¼ö¸Ç
2002-12   12102   Á¤»óÈÆ
2002-11   12101   ÃÖ±¤Èñ
2006-11   12101   ¹ÚÂùÇõ
2003-02   12101   ¾îÁøÇõ
2002-12   12100   ¾çűÇ
2013-09   12100   ¹ä¾Ë1±èÇü±Ù1
2009-11   12099   ³ª³Ê¿ì¸®
2013-09   12099   À嵿°Ç2014
2003-06   12099   ÀÌ¿øº¹
2003-02   12099   ¹Ú±ÔÇö
2003-02   12099   ¹Ú¿µ·Ï
2002-12   12099   ±èÇöÈ£
2003-03   12099   ¹éÈ£
2010-12   12098   ¹Ì¼ÒÂï»ç
2002-11   12097   ¿ø³«¿¬