Contents

Mysql Condition Filtering

Condition Filtering

join ๊ณผ์ •์—์„œ, prefix rows๋Š” ํ•œ ํ…Œ์ด๋ธ”์—์„œ ์ฒ˜๋ฆฌํ•œ ํ–‰๋“ค์ด join์— ์“ฐ์ด๊ธฐ ์œ„ํ•ด ์ „๋‹ฌ๋˜๋Š” ํ–‰์„ ์˜๋ฏธํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ optimizer๋Š” row์˜ ์กฐํ•ฉ์˜ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๋Š” ๋ฐฉํ–ฅ์œผ๋กœ prefix count๊ฐ€ ๋‚ฎ์€ ํ…Œ์ด๋ธ”์„ join์˜ ์•ž์— ๋‘๋ ค๊ณ  ๋…ธ๋ ฅํ•œ๋‹ค.

์กฐ๊ฑด ํ•„ํ„ฐ๋ง ์—†์ด๋Š”, prefix rows๋Š” where์ ˆ์— ์˜ํ•ด ์„ ํƒ๋œ ํ–‰์˜ ์˜ˆ์ƒ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. ๋ฐ˜๋ฉด์—, ์กฐ๊ฑด ํ•„ํ„ฐ๋ง์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ด์ „์— ๊ณ ๋ ค๋˜์ง€ ์•Š์€ where ์ ˆ์˜ ๋‹ค๋ฅธ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฏ€๋กœ prefix rows count๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

EXPLAIN์„ ๋ณด๋ฉด, rows column์€ access method์— ์˜ํ•ด ๊ณ„์‚ฐ๋œ row estimate๋ฅผ ์˜๋ฏธํ•˜๊ณ , filtered column์€ ๋ฐฑ๋ถ„์œจ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ, 100์€ ํ•„ํ„ฐ๋ง์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด rows : 200 ์ด๊ณ , filtered๋Š” 100์ผ ๊ฒฝ์šฐ 200๊ฐœ์˜ rows๋ฅผ prefix rows๋กœ ์ฝ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ , rows :200 / filtered : 20 ์ด๋ฉด, 200 * 20% = 40 ๊ฐœ์˜ rows๋ฅผ prefix rows๋กœ ์ฝ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์กฐ๊ฑดํ•„ํ„ฐ๋ง์— ๊ธฐ์—ฌํ•˜๋Š” ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ํ˜„์žฌ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•ด์•ผ ํ•จ.
1
2
3
select * from users join orders on users.id = orders.id where users.age > 25;

users.age๋Š” users๋ผ๋Š” ํ˜„์žฌ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ์กฐ๊ฑด์ž„
  1. ์กฐ์ธ ์ˆœ์„œ์—์„œ ์ด์ „ ํ…Œ์ด๋ธ”์˜ ์ƒ์ˆ˜ ๊ฐ’ ๋˜๋Š” ๊ฐ’์— ์˜์กดํ•ด์•ผ ํ•จ.
1
2
3
SELECT * FROM users JOIN orders ON users.id = orders.user_id WHERE orders.order_date > '2022-01-01'

์œ„์™€ ๊ฐ™์ด 2022-01-01 ๊ฐ™์€ ์ƒ์ˆ˜ ๊ฐ’์— ์˜์กดํ•ด์•ผ ํ•จ
  1. access method ๊ฐ€ ์ด๋ฏธ ๊ณ ๋ ค๋˜์ง€ ์•Š์•˜์–ด์•ผ ํ•จ.
  • ์˜ˆ๋ฅผ ๋“ค๋ฉด, users ํ…Œ์ด๋ธ”์— age ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๊ณ , ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ users.age > 25 ์กฐ๊ฑด์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด. ์ด ๊ฒฝ์šฐ, ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ด๋ฏธ age์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ถ”๊ฐ€ ํ•„ํ„ฐ๋ง์„ ์ ์šฉํ•˜์ง€ ์•Š์„ ๊ฑฐ์•ผ.

  • ๊ทธ๋Ÿฐ๋ฐ, ๋งŒ์•ฝ users ํ…Œ์ด๋ธ”์— name ์ปฌ๋Ÿผ์ด ์žˆ๊ณ , ์ฟผ๋ฆฌ์— WHERE users.name LIKE ‘J%’ ์กฐ๊ฑด์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ, name์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์—†๋‹ค๋ฉด, ์ด ์กฐ๊ฑด์€ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์— ์˜ํ•ด ์ด๋ฏธ ๊ณ ๋ ค๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์–ด. ๋”ฐ๋ผ์„œ ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ด ์กฐ๊ฑด์„ ์ถ”๊ฐ€๋กœ ํ•„ํ„ฐ๋ง ์ถ”์ •์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ.

์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์กฐ๊ฑด ํ•„ํ„ฐ๋ง์˜ ์„ฑ๋Šฅ์„ ๊ณผ๋Œ€ํ‰๊ฐ€ํ•˜๋ฉด, ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋‚˜๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ฒ•์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ธ๋ฑ์Šค๊ฐ€ ์—†๋‹ค๋ฉด, ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ปฌ๋Ÿผ ๊ฐ’์˜ ๋ถ„ํฌ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

  • ํžˆ์Šคํ† ๊ทธ๋žจ ์ •๋ณด๊ฐ€ ์—†๋‹ค๋ฉด, ํžˆ์Šคํ† ๊ทธ๋žจ์„ ์ƒ์„ฑํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค.

  • ์กฐ์ธ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. STRAIGHT_JOIN ๊ฐ™์€ ๊ฒƒ์„ hint๋กœ ์ค„ ์ˆ˜ ์žˆ๋‹ค.