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

djkneg883   
   Á¶È¸ 1285   Ãßõ 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 140/5688
2014-05   5004849   Á¤ÀºÁØ1
2015-12   1540607   ¹é¸Þ°¡
07-12   1287   ³óºÎ76
2022-10   1287   dogbull
2021-11   1287   AMDºô·±
2023-03   1287   ½Öcpu
2022-03   1288   ´ÃÆĶõ
2023-02   1288   2CPUÃÖÁÖÈñ
02-01   1288   ÀÏÀÌ»ï
02-01   1288   gusoong
2022-04   1288   ûÃá
2022-11   1288   ÀÌ¿øÀçK
2023-12   1288   ²Å»ì
2022-06   1288   ¿µ»êȸ»ó
2022-06   1289   keige369
2023-08   1289   ÃѾËź»ç³ªÀÌ
2023-01   1289   ±Ç¿ÀÁØ
2022-11   1289   Á¤ÀǼ®
2022-11   1289   ACACIA
01-23   1289   »þ¸Û
05-20   1289   langrisser
2022-10   1290   Jhqeds