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

djkneg883   
   Á¶È¸ 1208   Ãßõ 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 567/5684
2014-05   4958942   Á¤ÀºÁØ1
2015-12   1495413   ¹é¸Þ°¡
2020-04   1777   ½É¿ìö
2023-03   1209   djkneg883
2017-11   3999   ¹Ú¹®Çü
2020-04   2343   ÀÌÇö¼®1
2006-02   5348   Á¤ÅÂÀÏ
2014-07   4787   ±è°Ç¿ì
2014-07   4074   fLog
2017-11   3673   ºÐ´ç±èµ¿¼ö
2014-07   8229   KPD
2015-11   4230   Àü¼³¼ÓÀǹ̡¦
2014-07   18130   cpueblo
2009-08   6539   Äļ¾½º
2016-10   6673   ¾Æ¹Ù¹Ì½º
2017-12   4150   Nikon
2020-04   3845   ¿¥ÇÃ
2003-07   8788   Áø¿øÀç
2014-07   11018   À©µµ¿ì10
2016-10   5446   Noman
2003-08   8757   ±è¿¬¿ë
2009-09   6531   Yellow