Zenn
Open1

失敗から学ぶRDBの正しい歩き方を読む

jamijami

JOINのアルゴリズム

  • Nested Loop Join
  • Hash Join
  • Sort Marge Join

JOINは掛け算
JOIN数が多くなると、パフォーマンスが落ちる

LEFT JOIN
RIGHT JOIN
OUTER JOIN

  • MySQLは NLJのアルゴリズムのみ持っている
  • OUTER JOINはサポートしていない

Nested Loop Join

1行ずつループして処理

Hash Join

一度に全件読み込んで処理

Sort Marge Join

全件をソートして上から順に比較

INDEX

  • 基本的にBtree index

INDEXが効かないケース

  • 検索結果が多い、全体の件数が少ない
  • カーディナリティが低いところのINDEX
  • 条件にその列を使っていない
# INDEXが利用されない例
SELECT * FROM users where age * 10 > 100;
# INDEXが利用される例
SELECT * FROM users where age * 100/10;

Ref

作成者以外のコメントは許可されていません