2012年6月8日金曜日

Primary Keyがないテーブル その2

5/28にPrimary KeyがなくてもINSERTの速度はそこまで落ちなかったし、
普通のKeyがあればUPDATEもDELETEもそこまで問題なかった話を書いたけれど。

Primary Keyがないテーブルで複数行のUPDATEやDELETEをして、
それをレプリケーションしていたりすると大問題になるケースがあったりする。

http://lists.mysql.com/mysql/227217

…もともとこの話書きたかった気がするんだけどなぁ。。


ざっくり要約すると、binlog_formatがROWまたはMIXEDの場合、
Primary Keyが設定されていないとテーブルを全スキャンする必要があるので
とんでもなくレプリケーションが遅れる、という感じ。

Primary Key設定漏れがないかどうか確認するのはこんな感じ。



SELECT
 db,
 name
FROM (
 SELECT
  t.table_schema AS db,
  t.table_name AS name,
  constraint_name,
  table_type
 FROM information_schema.tables AS t
 LEFT JOIN information_schema.table_constraints AS tc ON
  t.table_name = tc.table_name AND
  constraint_name = 'PRIMARY'
) AS tmp
WHERE
 constraint_name IS NULL AND
 table_type = 'BASE TABLE' AND
 db NOT IN ('mysql','information_schema','performance_schema');

気を付けよう。


【2013/02/14 16:46】
こんなことを言いながら綺麗に自分でハマった!

ちゃんとエラーログに吐いてくれるんですね。すてき。

0 件のコメント :

コメントを投稿