maco's life

主にエンジニアリングと読書について書いていきます。

【MySQL】idカラムをとりあえずつくる

f:id:Maco_Tasu:20170107162201p:plain

私は新規で作成するテーブルにはほぼ必ずidカラムを作成しています。定義は以下のような感じです。

`id` int(11) NOT NULL AUTO_INCREMENT, ... PRIMARY KEY (`id`)

自分がidカラムつけるのは主に、データ量が膨大なテーブルを扱う時にシーケンシャルな処理ができることです。 実装をそのidを基準に処理をかけばrow readsが少なくDBに優しい処理をかけます。

例えばPKがある場合

  1. idを1から1000までを取得する
SELECT * FROM hoge WHERE id > 0 ORDER BY id asc LIMIT 1000;
  1. 次に1001から2000までを処理する
SELECT * FROM hoge WHERE id > 1000 ORDER BY id asc LIMIT 1000;

みたいな処理をかけば、row readsは1000になると思います。これが例えばindex key基準に処理した場合そのindexでヒットする件数分row readsになると思うので良くないなという時があります。idを追加した場合のデメリットは、その分のデータ量が増えることかとおもいますがそれを許容できるような条件ならば追加しておいても損はないかなと。

ここ数年でRailsプロジェクトに関わるようになったのですが、Railsもmigrationでテーブル作成するとidカラムは自動でついてくるみたいでちょっぴり嬉しい。