Livenow14/sql-tuning

โ˜… 0Forks 0GitHub โ†—Compare

README

๐Ÿš€ ์กฐํšŒ ์„ฑ๋Šฅ ๊ฐœ์„ ํ•˜๊ธฐ

์ƒ๊ฐํ•ด๋ณด๊ธฐ

https://user-images.githubusercontent.com/48986787/136792017-52444d1d-6de2-42c8-8fd0-89b89f3bc22b.png

A. ์ฟผ๋ฆฌ ์—ฐ์Šต

์‹ค์Šตํ™˜๊ฒฝ ์„ธํŒ…

$ docker run -d -p 23306:3306 brainbackdoor/data-tuning:0.0.1
  • workbench๋ฅผ ์„ค์น˜ํ•œ ํ›„ localhost:23306 (ID : user, PW : password) ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  1. ์ฟผ๋ฆฌ ์ž‘์„ฑ๋งŒ์œผ๋กœ 1s ์ดํ•˜๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  2. ์ธ๋ฑ์Šค ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์—ฌ 50 ms ์ดํ•˜๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํ™œ๋™์ค‘์ธ(Active) ๋ถ€์„œ์˜ ํ˜„์žฌ ๋ถ€์„œ๊ด€๋ฆฌ์ž ์ค‘ ์—ฐ๋ด‰ ์ƒ์œ„ 5์œ„์•ˆ์— ๋“œ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ตœ๊ทผ์— ๊ฐ ์ง€์—ญ๋ณ„๋กœ ์–ธ์ œ ํ‡ด์‹คํ–ˆ๋Š”์ง€ ์กฐํšŒํ•ด๋ณด์„ธ์š”.(์‚ฌ์›๋ฒˆํ˜ธ, ์ด๋ฆ„, ์—ฐ๋ด‰, ์ง๊ธ‰๋ช…, ์ง€์—ญ, ์ž…์ถœ์ž…๊ตฌ๋ถ„, ์ž…์ถœ์ž…์‹œ๊ฐ„)
  • ๊ธ‰์—ฌ ํ…Œ์ด๋ธ”์˜ ์‚ฌ์šฉ์—ฌ๋ถ€ ํ•„๋“œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ทผ๋ฌด์ค‘์ธ์ง€ ์—ฌ๋ถ€๋Š” ์ข…๋ฃŒ์ผ์ž ํ•„๋“œ๋กœ ํŒ๋‹จํ•ด์ฃผ์„ธ์š”.

https://user-images.githubusercontent.com/48986787/136792075-39e09997-e57c-4f66-9b2f-7d7200474741.png

ERD ํ…Œ์ด๋ธ” ๋ณด๊ธฐ

ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณด๊ธฐ ํž˜๋“œ๋„ค์š”, Mysql์—์„œ ์ œ๊ณตํ•˜๋Š” ERD๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ด์š”. ERD ์ž๋™์ƒ์„ฑ

https://user-images.githubusercontent.com/48986787/136738094-3ded4729-5757-4d1f-8cb2-a0b0cef14af4.png

์ƒ์„ฑ๋œ DB์˜ ERD๋Š” ์œ„์™€ ๊ฐ™์•„์š”.

1. ์ฟผ๋ฆฌ ์ž‘์„ฑ๋งŒ์œผ๋กœ 1s ์ดํ•˜๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊ฒฐ๊ณผ ์ฟผ๋ฆฌ

SELECT `๋†’์€_์—ฐ๋ด‰์˜_์‚ฌ์›`.์‚ฌ์›๋ฒˆํ˜ธ, `๋†’์€_์—ฐ๋ด‰์˜_์‚ฌ์›`.์ด๋ฆ„, `๋†’์€_์—ฐ๋ด‰์˜_์‚ฌ์›`.์—ฐ๋ด‰, `๋†’์€_์—ฐ๋ด‰์˜_์‚ฌ์›`.์ง๊ธ‰๋ช…, ์‚ฌ์›์ถœ์ž…๊ธฐ๋ก.์ž…์ถœ์ž…์‹œ๊ฐ„, ์‚ฌ์›์ถœ์ž…๊ธฐ๋ก.์ง€์—ญ, ์‚ฌ์›์ถœ์ž…๊ธฐ๋ก.์ž…์ถœ์ž…๊ตฌ๋ถ„
FROM (SELECT ์‚ฌ์›.์‚ฌ์›๋ฒˆํ˜ธ, ์‚ฌ์›.์ด๋ฆ„, ๊ธ‰์—ฌ.์—ฐ๋ด‰, ์ง๊ธ‰.์ง๊ธ‰๋ช…
		FROM ์‚ฌ์›
			JOIN ๊ธ‰์—ฌ ON ๊ธ‰์—ฌ.์‚ฌ์›๋ฒˆํ˜ธ = ์‚ฌ์›.์‚ฌ์›๋ฒˆํ˜ธ
			JOIN ์ง๊ธ‰ ON ์ง๊ธ‰.์‚ฌ์›๋ฒˆํ˜ธ = ๊ธ‰์—ฌ.์‚ฌ์›๋ฒˆํ˜ธ
			JOIN ๋ถ€์„œ๊ด€๋ฆฌ์ž ON ๋ถ€์„œ๊ด€๋ฆฌ์ž.์‚ฌ์›๋ฒˆํ˜ธ = ์ง๊ธ‰.์‚ฌ์›๋ฒˆํ˜ธ
			JOIN ๋ถ€์„œ ON ๋ถ€์„œ.๋ถ€์„œ๋ฒˆํ˜ธ = ๋ถ€์„œ๊ด€๋ฆฌ์ž.๋ถ€์„œ๋ฒˆํ˜ธ
		WHERE ๊ธ‰์—ฌ.์ข…๋ฃŒ์ผ์ž = '9999-01-01' and ์ง๊ธ‰.์ข…๋ฃŒ์ผ์ž = '9999-01-01' 
			and ์ง๊ธ‰.์ง๊ธ‰๋ช… = 'Manager' and ๋ถ€์„œ.๋น„๊ณ  = 'active'
		ORDER BY ๊ธ‰์—ฌ.์—ฐ๋ด‰ desc 
		LIMIT 0,5) as `๋†’์€_์—ฐ๋ด‰์˜_์‚ฌ์›`
	JOIN ์‚ฌ์›์ถœ์ž…๊ธฐ๋ก ON ์‚ฌ์›์ถœ์ž…๊ธฐ๋ก.์‚ฌ์›๋ฒˆํ˜ธ = `๋†’์€_์—ฐ๋ด‰์˜_์‚ฌ์›`.์‚ฌ์›๋ฒˆํ˜ธ
WHERE ์‚ฌ์›์ถœ์ž…๊ธฐ๋ก.์ž…์ถœ์ž…๊ตฌ๋ถ„ = 'O' 
ORDER BY `๋†’์€_์—ฐ๋ด‰์˜_์‚ฌ์›`.์—ฐ๋ด‰ desc, ์‚ฌ์›์ถœ์ž…๊ธฐ๋ก.์ž…์ถœ์ž…์‹œ๊ฐ„ desc;

๊ฒฐ๊ณผ ์ด๋ฏธ์ง€

https://user-images.githubusercontent.com/48986787/136782637-2e5764e9-3ab0-45bb-bdd6-99ab52ed0220.png

https://user-images.githubusercontent.com/48986787/136782135-2260a571-a3bb-4631-903b-13474b924299.png

์‹คํ–‰๊ณ„ํš (EXPLAIN)

https://user-images.githubusercontent.com/48986787/136782251-aa684571-553b-4918-988a-8c92617ba414.png

์‹คํ–‰๊ณ„ํš(WorkBench)

https://user-images.githubusercontent.com/48986787/136782549-d06ab5a4-92e1-4560-b8e3-fb89514c2eac.png

2. ์ธ๋ฑ์Šค ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์—ฌ 50 ms ์ดํ•˜๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ธ๋ฑ์Šค ์ถ”๊ฐ€ ๋ช…๋ น์–ด

CREATE INDEX `idx_์‚ฌ์›_์ž…์ถœ์ž…๊ตฌ๋ถ„_์‚ฌ์›`  ON `tuning`.`์‚ฌ์›์ถœ์ž…๊ธฐ๋ก` (์‚ฌ์›๋ฒˆํ˜ธ,์ž…์ถœ์ž…๊ตฌ๋ถ„);

ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์–ด์š”.

๊ฒฐ๊ณผ ์ด๋ฏธ์ง€

https://user-images.githubusercontent.com/48986787/136782637-2e5764e9-3ab0-45bb-bdd6-99ab52ed0220.png

https://user-images.githubusercontent.com/48986787/136785462-6ae8183c-8beb-4b18-ba4f-962412f170c1.png

์‹คํ–‰๊ณ„ํš (EXPLAIN)

https://user-images.githubusercontent.com/48986787/136788504-25004d7e-0a27-4995-8e9a-691ebbfc8e2f.png

์‹คํ–‰๊ณ„ํš(WorkBench)

https://user-images.githubusercontent.com/48986787/136788883-68d80d0a-74d2-4697-bb56-b88ffbc52493.png

B. ์ธ๋ฑ์Šค ์„ค๊ณ„

์‹ค์Šตํ™˜๊ฒฝ ์„ธํŒ…

$ docker run -d -p 13306:3306 brainbackdoor/data-subway:0.0.2
  • workbench๋ฅผ ์„ค์น˜ํ•œ ํ›„ localhost:13306 (ID : root, PW : masterpw) ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

ERD ํ…Œ์ด๋ธ” ๋ณด๊ธฐ

์ด๊ฒƒ๋„ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณด๊ธฐ ํž˜๋“œ๋„ค์š”, Mysql์—์„œ ์ œ๊ณตํ•˜๋Š” ERD๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ด์š”.

https://user-images.githubusercontent.com/48986787/136790666-379c0aaa-c21a-41d3-968e-83e79e289b2a.png

๐Ÿ’‰

์š”๊ตฌ์‚ฌํ•ญ

  • ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ์…‹์„ ํ™œ์šฉํ•˜์—ฌ ์•„๋ž˜ ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ 100ms ์ดํ•˜๋กœ ๋ฐ˜ํ™˜
    • Coding as a Hobbyย ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์„ธ์š”.

      programmer hobby ์ธ๋ฑ์‹ฑ

      ์ฟผ๋ฆฌ

      SELECT 
      	SUM(CASE WHEN hobby='Yes' THEN percentage ELSE 0 END) as Yes,
      	SUM(CASE WHEN hobby='No' THEN percentage ELSE 0 END) as No
      FROM ( 
      	SELECT hobby, ROUND(COUNT(hobby)*100/(SELECT COUNT(*) FROM programmer) ,1) as percentage FROM subway.programmer GROUP BY hobby ORDER BY null
      ) tb_derived;

      https://user-images.githubusercontent.com/48986787/137575175-385d78e7-7f34-4c1e-9b9c-c9354bc07019.png

      https://user-images.githubusercontent.com/48986787/137142149-6d79a9b3-a9ae-415a-8fe0-55b7321ad505.png

      ์‹คํ–‰๊ณ„ํš (EXPLAIN)

      https://user-images.githubusercontent.com/48986787/137142263-28afa97d-eb31-4baa-993f-a29903e84cac.png

      ์‹คํ–‰๊ณ„ํš (Workbench)

      https://user-images.githubusercontent.com/48986787/137142304-dcc8f6ac-7101-43b3-ae6d-6101e17ddb32.png

      ์ฟผ๋ฆฌ๊ฐ€ ํ™•์‹คํžˆ ์ค„์–ด๋‘” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

      ์ฐธ๊ณ ์‚ฌํ•ญ

      ๊ธฐ์กด์˜ ์ฟผ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋งˆ์Œ์— ๋“ค์ง€์•Š์•„. ์œ„์™€ ๊ฐ™์ด ์ฟผ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์–ด์š”. ํ•˜์ง€๋งŒ ์ขํ˜€์ง€์ง€ ์•Š๋Š” ํ†ต๊ณก์˜ 0.1์ดˆ๋Œ€์˜ ๋ฒฝ์ด ๋А๊ปด์กŒ์–ด์š”. (0.11~2์ดˆ์˜ ์ €์ฃผ)

      hobby์˜ ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋‚ฎ์•„(์นด๋””๋„๋ฆฌํ‹ฐ 2, ์„ ํƒ๋„ 0.5), (id, hobby) ๋ณตํ•ฉ์œ ๋‹ˆํฌํ‚ค๋ฅผ ์œ ์ง€ํ–ˆ๋˜ ๊ฒƒ์ด ๋ฌธ์ œ์˜€์—ฌ์š”. ์ฟผ๋ฆฌ์—์„œ ๋ณตํ•ฉ uniqueํ‚ค์ค‘ ํ•˜๋‚˜์ธ hobby๋ฅผ Group by๋ฅผ ํ•˜๋ คํ•˜๋‹ˆ, Using temporary, ์ฆ‰ ๋‚ด๋ถ€์— ์ž„์‹œ ํ…Œ์ด๋ธ”์ด ์ถ”๊ฐ€๋˜๋ฉฐ ์†๋„ ์ €ํ•˜๊ฐ€ ์ผ์–ด๋‚œ๊ฒŒ ํ™”๊ทผ์ด์—ˆ๋„ค์š”. ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹ˆ๊ธฐ์— ์ •๋ ฌ๋จ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์•„ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์˜€์–ด์š”.

      ์ฟผ๋ฆฌ ์ƒ์œผ๋กœ, ๋˜ํ•œ ์‹คํ–‰๊ณ„ํš์ƒ์œผ๋กœ๋„ ๋”์ด์ƒ ์ค„์ผ ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จ์ด ๋˜์–ด. ๊ธฐ์กด์— ์œ ์ง€ํ•˜๋˜ ๋ฐฉ์‹์„ ๋ฒ„๋ฆฌ๊ธฐ๋กœ ํ–ˆ์–ด์š”.

      DROP INDEX `id_hobby_unique`  ON `subway`.`programmer`;

      ๊ธฐ์กด์— ์กด์žฌํ•˜๋˜ UNIQUE ์ œ์•ฝ์กฐ๊ฑด์„ ์‚ญ์ œํ•˜๊ณ ,

      CREATE INDEX `idx_programmer_hobby`  ON `subway`.`programmer` (hobby);

      hobby๋งŒ ๊ฐ€์ง€๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์–ด์š”.

    • ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ณ„๋กœ ํ•ด๋‹นํ•˜๋Š” ๋ณ‘์› ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜์„ธ์š”. (covid.id, hospital.name)

      ์ œ์•ฝ์กฐ๊ฑด

      covid id ์ปฌ๋Ÿผ PK, UQ ์ œ์•ฝ์กฐ๊ฑด

      hospital id ์ปฌ๋Ÿผ pk, UQ ์ œ์•ฝ์กฐ๊ฑด,

      programmer id ์ปฌ๋Ÿผ, pk, UQ ์ œ์•ฝ์กฐ๊ฑด

      ์ฟผ๋ฆฌ

      SELECT covid.id as covid_id, hospital.name as hospital_name
      FROM subway.hospital
      JOIN covid ON covid.hospital_id = hospital.id
      JOIN programmer ON programmer.id  = covid.programmer_id;

      https://user-images.githubusercontent.com/48986787/136799255-214bb701-75f3-47dd-82c5-2cd182dc7d1b.png

      https://user-images.githubusercontent.com/48986787/136799345-c50ba69f-298b-4de1-8067-2d9789f79448.png

      ์‹คํ–‰๊ณ„ํš (EXPLAIN)

      https://user-images.githubusercontent.com/48986787/136799539-d6d98960-602c-44be-ba72-c29fd389c62d.png

      ์‹คํ–‰๊ณ„ํš (Workbench)

      https://user-images.githubusercontent.com/48986787/136799370-2e043dca-c6aa-4873-855d-2c4d1d03d390.png

    • ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ทจ๋ฏธ์ธ ํ•™์ƒ ํ˜น์€ ์ฃผ๋‹ˆ์–ด(0-2๋…„)๋“ค์ด ๋‹ค๋‹Œ ๋ณ‘์› ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  user.id ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์„ธ์š”. (covid.id, hospital.name, user.Hobby, user.DevType, user.YearsCoding)

      ์ œ์•ฝ์กฐ๊ฑด

      ์—†์Œ

      ์ฟผ๋ฆฌ

      SELECT C.id, H.name, P.Hobby, P.Dev_Type, P.Years_Coding, P.student
      FROM (SELECT id, Hobby, Dev_Type, Years_Coding, student FROM programmer 
          WHERE (hobby = 'Yes'
              AND student <> 'NO'
              AND student <> 'NA')
              OR (years_coding = '0-2 years')) AS P
      INNER JOIN covid AS C ON C.programmer_id = P.id
      INNER JOIN hospital AS H ON H.id = C.hospital_id	
      ;

      https://user-images.githubusercontent.com/48986787/137575439-f63ee5d3-d406-4e6c-9531-7d3b2de8758d.png

      https://user-images.githubusercontent.com/48986787/137575448-4bccb8a4-ef4f-4570-831c-db02b77e57af.png

      ์‹คํ–‰๊ณ„ํš (EXPLAIN)

      https://user-images.githubusercontent.com/48986787/137148163-07870f73-5135-4ea9-a0bc-f175e5f33cb0.png

      ์‹คํ–‰๊ณ„ํš (Workbench)

      https://user-images.githubusercontent.com/48986787/137575503-65d61c21-a8f3-4466-b0f7-f4ddc38b6d54.png

      ์ฐธ๊ณ ์‚ฌํ•ญ

      ์ „์ฒด ํ…Œ์ด๋ธ”์—์„œ where ์ ˆ์„ ๊ฑฐ๋Š” ๊ฒƒ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•˜์–ด์š”. FROM์ ˆ์—์„œ JOIN์„ ํ• ๋•Œ, ์กฐ๊ฑด์ด ํ•„์š”ํ•œ ํ…Œ์ด๋ธ”์€ ์กฐ์ธ ์ „ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•ด์ฃผ๋ฉด, ์‹œ๊ฐ„๋„ ์ ˆ์•ฝ๋  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ์–ด์š”.

      covid์— programmer_id๋ฅผ ์ธ๋ฑ์‹ฑํ•˜๋ฉด, ์‹คํ–‰๊ณ„ํš์œ Query Cost๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

      https://user-images.githubusercontent.com/48986787/137148215-2b8a2999-dba5-4faf-9899-76dd12c52f03.png

      ํ•˜์ง€๋งŒ ์‹คํ–‰์‹œ๊ฐ„์— ์žˆ์–ด์„œ, ํฐ ์ฐจ์ด์ ์„ ๋А๋ผ์ง€ ๋ชปํ•ด ์ธ๋ฑ์‹ฑ์„ ํ•˜์ง€ ์•Š์•˜์–ด์š”. ์ดํ›„ Query Cost๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋ฉด, programmer_id์˜ ์ธ๋ฑ์‹ฑ์„ ๊ณ ๋ คํ•ด๋ด๋„ ์ข‹์„ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

      hostpital์˜ name์ปฌ๋Ÿผ์ด uniqueํ•œ๊ฐ€?์— ๋Œ€ํ•œ ๊ณ ์ฐฐ.

      ๋ณ‘์›์ด๋ฆ„์ด ๊ณผ์—ฐ ๊ฒน์น ๊นŒ? ๋ผ๊ณ  ์ƒ๊ฐ์„ ํ–ˆ๋Š”๋ฐ, ์–ด์ฉŒ๋ฉด ๊ฒน์น  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ์‚ฌ๋žŒ ์ด๋ฆ„๋„ ๋™์ผ์ด๋ฆ„์ด ๋งŽ์€๋ฐ ๋ณ‘์› ์ด๋ฆ„๋„ ๋ถ„๋ช… ๊ฒน์น ๊ฑฐ์—์š” (์ˆ˜๋งŽ์€ "๊น€๋‚ด๊ณผ"๋“ค..) hospital์— ์žˆ๋˜ name์˜ UNIQUE ์†์„ฑ์„ ์ œ๊ฑฐํ–ˆ์–ด์š”.

      DROP INDEX `name_UNIQUE`  ON `subway`.`hospital`;

      ์‹คํ–‰๋˜๋Š” ์ฟผ๋ฆฌ๋„ ์ฐจ์ด๊ฐ€ ์—†๋„ค์š”! ("๋งˆ์Œ๋Œ€๋กœ UNIQUE ์†์„ฑ์„ ์ •์˜ํ•˜์ง€ ๋ง์ž"๋ฅผ ๋ฐฐ์› ๋„ค์š” ใ…Žใ…Ž)

      https://user-images.githubusercontent.com/48986787/137149699-f403f8ae-e32c-434e-a9fe-ab3ba3fc7f95.png

    • ์„œ์šธ๋Œ€๋ณ‘์›์— ๋‹ค๋‹Œ 20๋Œ€ India ํ™˜์ž๋“ค์„ ๋ณ‘์›์— ๋จธ๋ฌธ ๊ธฐ๊ฐ„๋ณ„๋กœ ์ง‘๊ณ„ํ•˜์„ธ์š”. (covid.Stay)

      ์ œ์•ฝ์กฐ๊ฑด

      member id PK ์ œ์•ฝ์กฐ๊ฑด

      coivd (hospital_id, member_id) ์ธ๋ฑ์‹ฑ

      ์ฟผ๋ฆฌ

      SELECT stay, COUNT(stay)
      FROM (SELECT id FROM subway.member WHERE age BETWEEN 20 AND 29) AS M
      INNER JOIN covid AS C ON C.member_id = M.id
      INNER JOIN (SELECT id, member_id FROM programmer WHERE country = 'India') AS P ON P.id = C.programmer_id
      INNER JOIN (SELECT id, name FROM hospital WHERE name = '์„œ์šธ๋Œ€๋ณ‘์›') AS H ON H.id = C.hospital_id
      GROUP BY stay;

      https://user-images.githubusercontent.com/48986787/137574721-8dc21df8-5d01-4d7b-994c-abf2933e84be.png

      https://user-images.githubusercontent.com/48986787/137574727-9ffa5a30-1e5d-4d31-ad0c-4d5a2a3115c8.png

      ์‹คํ–‰๊ณ„ํš (EXPLAIN)

      https://user-images.githubusercontent.com/48986787/137574744-3e34844e-87c2-43d7-80ea-15043eb60f08.png

      ์‹คํ–‰๊ณ„ํš(Workbench)

      https://user-images.githubusercontent.com/48986787/137574730-dd629a6e-7f23-42c0-b54f-75deb162e1a6.png

      ์ฐธ๊ณ  ์‚ฌํ•ญ

      covid ํ…Œ์ด๋ธ”์˜ hospital_id์˜ ์„ ํƒ๋„(์นด๋””๋„๋ฆฌํ‹ฐ)๊ฐ€ 32๋กœ ๋‚˜์˜ค๊ณ  ์žˆ์–ด์š”, member_id๋Š” 95667๋กœ ๋‚˜์™€์„œ, ๋จผ์ € member_id๋กœ ์ธ๋ฑ์Šค๋ฅผ ์žก์•˜์–ด์š”. (์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์œผ๋ฉด ์ข‹๋‹ค~ ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ) ํ•˜์ง€๋งŒ, ์†๋„๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์ข‹๊ฒŒ ๋‚˜์˜ค์ง€ ์•Š์•˜์–ด์š”. ๊ทธ๋‹ค์Œ์œผ๋กœ, ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ (member_id, hospital_id)๋กœ ์ธ๋ฑ์Šค๋ฅผ ์žก์•˜๋Š”๋ฐ ์ด๋˜ํ•œ ์ƒ๊ฐ๋ณด๋‹ค ๋Šฆ์€ ์†๋„๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ์—, (hospital_id, member_id)๋กœ ์ธ๋ฑ์Šค๋ฅผ ์žก์•˜์Šต๋‹ˆ๋‹ค. ๋ณตํ•ฉ ์ธ๋ฑ์Šค์—์„œ, ์„ ํ–‰๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋„ˆ๋ฌด ๋†’์œผ๋ฉด, ๊ทธ๋งŒํผ ๊ฒ€์ƒ‰ ๋น„์šฉ์ด ๋” ๋“ค์ง€ ์•Š์„๊นŒ ํ•ฉ๋‹ˆ๋‹ค :)

    • ์„œ์šธ๋Œ€๋ณ‘์›์— ๋‹ค๋‹Œ 30๋Œ€ ํ™˜์ž๋“ค์„ ์šด๋™ ํšŸ์ˆ˜๋ณ„๋กœ ์ง‘๊ณ„ํ•˜์„ธ์š”. (user.Exercise)

      ์ œ์•ฝ์กฐ๊ฑด

      covid hospital_id, member_id ์ธ๋ฑ์‹ฑ

      ์ฟผ๋ฆฌ

      SELECT P.exercise, COUNT(exercise)
      FROM (SELECT id FROM subway.member WHERE age BETWEEN 30 AND 39) AS M
      INNER JOIN covid AS C ON C.member_id = M.id
      INNER JOIN programmer AS P ON P.id = C.programmer_id
      INNER JOIN (SELECT id, name FROM hospital WHERE name = '์„œ์šธ๋Œ€๋ณ‘์›') AS H ON H.id = C.hospital_id
      GROUP BY P.exercise;

      https://user-images.githubusercontent.com/48986787/136895512-4eb22980-f5b4-442f-9f10-b04d36689d03.png

      https://user-images.githubusercontent.com/48986787/137574945-78c4b4df-f15a-4c2c-90af-9fc3cf0ee465.png

      ์‹คํ–‰๊ณ„ํš (EXPLAIN)

      https://user-images.githubusercontent.com/48986787/137574954-20fafc0f-f042-4622-a6a0-062268615d6b.png

      ์‹คํ–‰๊ณ„ํš(Workbench)

      https://user-images.githubusercontent.com/48986787/137574959-722b7c30-793f-49d1-8751-f5c214f2e839.png

      ์ฐธ๊ณ ์‚ฌํ•ญ

      ORDER BY null์„ ํ†ตํ•ด, ์‹คํ–‰๊ณ„ํš Extra์˜ filesort๋ฅผ ์—†์•จ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์‹คํ–‰ ์†๋„์˜ ์ฐจ์ด๊ฐ€ ํฌ์ง€ ์•Š์•˜์–ด์š”. ๊ทธ๋ฃนํ™” ๋œ exercise์˜ ๋ชจ์ˆ˜๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํฌ์ง€ ์•Š์•„์„œ ์ •๋ ฌ์„ ํ•˜๊ฑด, ํ•˜์ง€ ์•Š๋˜ ์ฐจ์ด๊ฐ€ ์—†๋Š”๋“ฏ ํ•ฉ๋‹ˆ๋‹ค. GROUP BY๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •๋ ฌ์„ ํ•˜๊ธฐ์—, ๋‹ค๋ฅธ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์–ด์š”.

Contributors

Livenow14brainbackdoor

Issues