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

djkneg883   
   Á¶È¸ 1279   Ãßõ 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 325/5687
2015-12   1531305   ¹é¸Þ°¡
2014-05   4995388   Á¤ÀºÁØ1
2019-05   4476   ºÀ·¡
2020-08   4439   winner712
2013-06   10203   ±èÃæȯ
2010-05   7230   °ú°ÅÁö»ç
2019-05   2674   ÇູÇϼ¼
2013-06   7211   SkyBase
2014-11   6116   Æú¶ó¸®½º
2016-02   3391   Á¦Å¸
2023-08   1624   ¿ë¼®
2010-06   9702   ±èÈ£¼º
2013-06   7750   ±îºñ
2014-11   6166   VSPress
2018-04   4691   ÄĹÚ
2022-01   3292   Elsaphaba
2013-06   7100   ȸ¿øK
2014-11   6640   dlcjfgjs
2017-01   27799   ³ªÆÄÀÌ°­½ÂÈÆ
2010-07   7959   ½ÂÈĴϵµÄì
2022-02   1755   ºÀ·¡
2023-09   2100   227skt