Post

データベース

2018-04-22 13:50:03

Indexとはなにか

インデックスとはテーブルに格納されているレコードを高速に取り出すための仕組み 以下のようなO(n)問題を抱えたクエリがあるとする。 SELECT * FROM users WHERE first_name = ‘Tom’ このクエリのパフォーマンスを上げるためには、以下のようにIndexを貼る。 ALTER TABLE users ADD INDEX (first_name) メリット・デメリットメリット データの読み込み・取得の速度向上 デメリット 容量の増加 書き込み速度の低下 データの作成・更新時には、同時にインデックスの追加・更新も行われるため、上記のようなデメリットが生じる。 イ...

データベース

DB Index mysql

2018-05-12 12:36:36

N+1問題とは

概要N+1問題の説明と対応についてまとめる。 N+1問題とは 全てのレコードの取得に1個+レコード文だけのN個のSQLを発行してしまう問題 N+1というより1+Nと解釈したほうがわかりやすい 例 一覧表示用のデータを取得するケース 一覧用の全データを取得するSELECTを1回発行(Nレコード返ってくる) Nレコードの関連データ取得のためにSELECTをN回発行 対応 join SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."...

データベース

N+1

2018-07-19 12:56:20

MySQLのJOINとUNIONについて

概要MySQLのJOINの種類とUNIONについてまとめる INNER JOIN指定カラムの値が一致するレコード同士を結合する。指定したカラムの値が一致しない場合は結合しない。(両方のテーブルに一致するデータだけ結合される。) users+------+--------+------+| id | sex | name |+------+--------+------+| 0 | male | John || 1 | female | Risa || 2 | male | Taro |+------+--------+------+ accounts+---...

データベース

mysql join union

2018-08-16 00:50:59

ER図のリレーションシップの種類について

概要ER図のリレーションシップの種類についてまとめる。 ER図のリレーションシップの種類ER図のリレーションシップには3つの種類がある。 リレーションシップの種類 テーブル関係 線の種類 依存リレーションシップ 子テーブルが親テーブルに依存(テーブル間に親子関係がある) 実線(親→子) 非依存リレーションシップ 子テーブルが親テーブルに依存していない(テーブル間に親子関係がない) 点線(親→子) 多対多リレーションシップ 多対多のテーブル関係 実線(親↔子) 依存リレーションシップ ユーザー ユーザーNo(PK) 企業No(FK) 名前 メールアドレス ユーザ...

データベース

ER

2018-08-07 11:36:36

複数のテーブルに多対1で紐づく時のテーブル設計のアプローチについて

概要複数のテーブルに対し、多対1でテーブルが関係付くときのテーブル設計のパターンについてまとめる。 データ設計以下のようなケースのデータ設計を例とする。  issues id title pullrequests id title comments id content commentsがissues、pullrequestsのどちらに対しても多対一で関係付くようなケース。 ポリモーフィック関連 issues id title pullrequests id title comments id content target_table target_id...

データベース

ポリモーフィック SQLアンチパターン