25. my $memos = $self->dbh->select_all(
'SELECT * FROM memos WHERE is_private=0 ORDER BY
created_at DESC, id DESC LIMIT 100'
);
for my $memo (@$memos) {
$memo->{username} = $self->dbh->select_one(
'SELECT username FROM users WHERE id=?',
$memo->{user},
);
}
webapp/perl/lib/Isucon3/Web.pm
100回ルーーーープ
“/”
27. id user_id id name
memosテーブル usersテーブル
id user_id name
memos JOIN users ON memos.user_id = user.id
28. my $memos = $self->dbh->select_all(
'SELECT memos.*,users.username
FROM memos JOIN users ON memos.user = users.id
WHERE memos.is_private=0
ORDER BY memos.created_at DESC,
memos.id DESC
LIMIT 100'
);
webapp/perl/lib/Isucon3/Web.pm
“/”,“/recent”
31. SELECT * FROM memos WHERE is_private=0 ORDER BY
created_at DESC LIMIT 100
id is_priv
ate
...
0
0
1
0
1
memosテーブル
id is_priv
ate
...
0
0
0
SORT
webapp/perl/lib/Isucon3/Web.pm
indexがないと
32. indexをつくる
cat <<'EOF' | mysql -u isucon isucon
ALTER TABLE memos ADD INDEX (is_private,created_at);
EOF
init.sh
43. cat <<'EOF' | mysql -u isucon isucon
ALTER TABLE memos ADD COLUMN title text;
UPDATE memos SET
title = substring_index(content,"n",1);
EOF
init.sh
titleカラムの追加