アプリケーション方面では色々あるし、DBAから見ても良いことはないはず…と思ってましたが、 *ちゃんとMySQLの都合に沿ってやれば* 意外と忌避する理由もないことにふと気付きました。途中で3回くらいテーマ変更して最終的にこの形に落ち着いたカタチです。はふん。
ごめんなさい、当日流していたスライドに致命的な誤り(5.5以降ではなく、5.5以降 *ではない*)がありました。。まとめてくれた方ごめんなさい…><
DBAっぽく、という背景があったので、「論理削除? それUPDATEじゃん」というのが割と前提にあります。「DELETEじゃなくてUPDATEなんだから、削除とか言わずにスーパー非表示フラグでいいじゃん、システム的に *ちゃんとMySQLの都合に沿ってやれば* はそこまで変わらないし」というのが個人の見解です。
しゃらっと *ちゃんとMySQLの都合に沿ってやれば* という感じで流してますが、要はつまり
status <> :絶版 とかやられるとMySQLは死ぬ #ronsakucasual
— Ryuta Kamizono (@kamipo) 2015, 8月 31
deleted_at IS NULL とかやられるとMySQLは死ぬ #ronsakucasual
— Ryuta Kamizono (@kamipo) 2015, 8月 31
どう設計してくれてもいいがMySQLの命だけは守りたい #ronsakucasual
— Ryuta Kamizono (@kamipo) 2015, 8月 31
こういう話で、bool(MySQLだとboolがないのでENUMかTINYINTかな)だと必ず"="演算子の等価比較に持ち込める(そして持ち込めないクエリーはユーザートラフィックが吐いてはいけない)ので好きとか、カーディナリティーがどうこうというより必ず全てのセカンダリーインデックスの先頭につけろでないとインデックスだけで完結できないぞとかそんな話です。
( ´-`).oO(や、別に先頭じゃなくてもいいんですが、万人が正しいセカンダリーインデックスを考えてくれるかというとそうではないわけで、打ち漏らされるくらいなら全部先頭につけろって感じです。自信のある人は正しいところにつけてください。。
@t_wadaさん と色々お話できて、「こんなすごい人でも闇に対しては少しずつ立ち向かうしかないのだなぁ」とか「あー、SQLアンチパターンの本持ってくるの忘れた…(サインほしかった)」とか「エンタープライズ 闇 Casual」とか楽しかったです。
もし次があるなら、Oracle(DBの方)の重課金してる人たちがスーパー非表示についてどう思ってるのかとか聞きたいですね。「スーパー非表示? え、Flashbackじゃだめなの?」みたいな。
@kenchanくんさん お疲れ様でした!
ちなみにスライド冒頭のInnoDBさんの「よくやるよくやる」はチェンジバッファのことですのでご安心ください(?)
論理削除(ライフサイクルを終えるまでスーパー非表示)と非同期削除(一時的にスーパー非表示&非同期パージ)の間には少し溝があるような気がしました。
0 件のコメント :
コメントを投稿