mysql

SELECT ... FOR UPDATEとロックの挙動

kamipoさんが補足を書いてくれたので、参照するとよいです。

SELECT COUNT(*) FROM (SELECT 1 FROM xxxx)が、SELECT COUNT(*) FROM (SELECT item_id FROM xxxx)より速い理由

とあるサービスでslow logをみていたら、どこかの記事で読んだことのあるクエリがでてきたのだけど、もうちょっと速くできないものか、と考えてみた。結論を言えば、 BEFORE: SELECT sql_no_cache COUNT(*) FROM (SELECT item_id FROM category2item WHERE c…

text型のカラムを明示的にINSETRTしなかったときのNULL値の挙動

後輩に訊かれてどうだったっけ?と思って調べたので、まとめておく。 まとめ text型でINSERT時に明示的に情報を入れない場合、カラムがNOT NULLであったときは、""が入る。NOT NULLでない場合はNULLが入る。 作業ログ # not null制約をつけている場合 mysql> …

「いいね!」的なもののschema

facebookの「いいね!」やはてなstarみたいなものを自分でつくるとすると、どういうschemaにするかなーということで、ちょっと考えてみた。(mysql 5.1以上) create table user ( id int unsigned not null auto_increment, primary key id(id) ) ENGINE=InnoD…

マスターデータの書きかえ

メンテナンスなどで、マスターデータを書きかえるときは、 use strict; use warnings; use DBIx::Handler; my $db = DBIx::Handler->new("dbi:mysql:test;", "root", "", { RaiseError => 1}); $db->dbh->do(q{ CREATE TABLE IF NOT EXISTS hoge ( id int un…

enum列へのalter table

巨大なtableへのalter tableが必要になったのだけど、enumへのalterって確か最適化してくれたんじゃなかったっけな、ということで、一応確認のため検証してみる次のschemaを用意します。 CREATE TABLE `enum_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, …

qudoで一日にjobが何件ぐらい投入されたか計測する

jobが一日あたり何件ぐらい投入されているのか、お手軽に確認できるようにするのに、MySQLのtriggerを使ってみるとどうだろ、ということでやってみた。まず普段のqudoのschemaに加え、以下のようなテーブルを追加します。 CREATE TABLE `job_counter` ( `enq…