1文字でSQLを200倍遅くする方法
2022/05/17 12:09
yarumato
“MariaDB。普段は50ms程度だったが2200msかかる。TIMESTAMP(6)型のカラムにWHEREするとき、マイクロ秒を超える精度の値(マイクロ秒に一桁追加)を渡すと、Truncateが発生しインデックスが使われなくなる”
2022/05/17 12:52
utgwkk
なるほどおもしろい
2022/05/17 13:33
door-s-dev
TL;DR見てもよく分からない。最後のまとめをみると分かる/たまたまアップデートしたタイミングなのかドライバのバージョンfixしてないのか
2022/05/17 13:39
Windymelt
へ〜おもしろい。
2022/05/17 13:41
tofu-kun
"(少なくともMariaDBでは)TIMESTAMP(6)型のカラムに対してWHEREでマイクロ秒を超える精度の絞り込みをかけるとインデックスが使われなくなります(たぶん)。"
2022/05/17 14:10
rryu
カラムの型としてはマイクロ秒までだが日付の値としては100ナノ秒まで有効らしく、勝手に丸めてインデックスを使うと結果が不正確になるのでインデックスが使われずテーブルスキャンになるということらしい。
2022/05/17 14:30
niramoyashi
ノイズが多くて読みづらい
2022/05/17 14:44
masudatarou
mariaDBはMySQLと互換性低いからできれば使いたくないよね
2022/05/17 15:50
versatile
TL;DR が TL;DR になってない気もするが、ちゃんと条件の桁数合わせないと index 使われないってことか
2022/05/17 15:59
chinpokomon_master
一言で言うと寒い。端的にめっちゃスベってる。
2022/05/17 16:11
spark7
「TIMESTAMP(6)型のカラムに対してWHEREでマイクロ秒を超える精度の絞り込みをかけるとインデックスが使われなくなります」
2022/05/17 16:14
kazuph1986
“go-sql-driver/mysql”のアプデを起因にMariaDBだとナノ秒使うとインデックスが使われなくなるという仕様を踏んだみたい。
2022/05/17 16:16
frontline
終盤面白い。
2022/05/17 17:14
ngsw
すき
2022/05/17 17:16
Shinwiki
そんなに茶番を読ませたいもんかね
2022/05/17 17:22
ShionAmasato
読み物っぽくなってて、単に事実だけ知りたい人には煩わしいかもしれない記事。/うちは暇なときに読んでるので不快感はなかった
2022/05/17 17:27
katzchang
難易度高い
2022/05/17 17:42
j1nsuke
いいね
2022/05/17 17:49
rgfx
"(少なくともMariaDBでは)TIMESTAMP(6)型のカラムに対してWHEREでマイクロ秒を超える精度の絞り込みをかけるとインデックスが使われなくなります(たぶん)。"
2022/05/17 18:28
canadie
「マイクロ秒以下を指定すると」じゃなくて「不正な日付文字列を指定すると」じゃないか。なんか「自分は悪くない」みたいなこと書いてないか?/mySQL系のデフォルトの雑仕様ってこういうところで悪さするんだよな
2022/05/17 18:52
fuji_haruka
楽しそうで何より。
2022/05/17 20:51
theatrical
まぁ妥当な動作だなと言う感想。
2022/05/17 20:57
mom0tomo
なるほど〜おもしろい、読みやすい
2022/05/17 21:53
ys0000
MariaDBでindexを検索せずテーブルサーチするクエリを作ってしまった話。以前は丸める処理が動いていたがパッチで処理が外れて起きるようになった模様。
2022/05/17 22:05
kagehiens
他のDBで同様の事情があるかどうかは知らないけど、テーブルに保持されてる列の値が荒い精度で、検索条件のほうに細かいときにテーブルの値の方が変換必要になっちゃって遅くなるみたいな話は無くはなさそう。
2022/05/17 22:27
kno
“結論としては、マイクロ秒を超える精度の値を渡すと、Truncateが発生しインデックスが使われなくなるようです。”カラムの型に合わせないとインデックス効かない
2022/05/17 23:53
GARAPON
冒頭に書いてある通り面白くない。ネタのフォーカスする方向性が間違ってるきがする
2022/05/18 01:02
slash_01
こんな罠もあるのか。知らんかった。
2022/05/18 01:16
sophizm
“以前はgo-sql-driver/mysqlでマイクロ秒に丸められてクエリが発行されていましたが、DB側でも丸め操作が行われることを理由に、2021/04/01にリリースされたv1.6.0で丸めこみをなくす変更が入ったため、顕在化したようです”
2022/05/18 01:37
buzztaiki
ライブラリ更新したらインデックス使われなくなるのはなかなかキツイかも。
2022/05/18 02:00
asa_kaz_x
“。 ”
2022/05/18 03:08
kako-jun
途中に出てきた長いSQLがすごかった。なんていうか、揚げ物のようにこってりしてる
2022/05/18 07:25
taruhachi
型が違うものを指定したらインデックス効かなくて痛い目にあうというの、昔雑に全部クオートして渡すプログラム書いて失敗した事がある。
2022/05/18 08:17
eichisanden
「こういうのでいいんだよ、こういうので」企業や団体のテックブログで扱うネタとしては泥臭い失敗ネタが世に役に立つ
2022/05/18 10:09
saikyo_tongaricorn
こういうのをもっと見たい
2022/05/18 10:32
deep_one
ざっと読んだ感じだとわからなかったが、コメントを見るにインデックスが使える、使えないの話か。
2022/05/18 11:37
lumpenproletariat
TL;DR の意味を理解してない人だ
2022/05/18 12:26
nakamura-kenichi
MySQLってこんなん結構あるよな。
2022/05/18 13:00
knitcapmann
where区がダメ
2022/05/18 15:09
takenoko-str
“Loki”
2022/05/18 15:24
h_taiji
覚えておく