sql

Q4Mを試す

sql

ようやくインストールが終わったので、試してみる まずはチュートリアルに沿ってやってみる。 http://q4m.31tools.com/tutorial.php テーブル作成 CREATE TABLE my_queue (v1 int not null, v2 varchar(255)) ENGINE=queue; desc my_queue; +-------+-------…

MySQL + Q4Mインストール

sql

Q4Mを使ってみようと思い立ったが、まずはMySQLをソースからインストールする必要がありそう。 そもそも、ソースインストールやRPM化をしたことがないので、ハードル高そう(爆) http://d.hatena.ne.jp/dekaduki/20100209/1265718676 に書いてあることをそ…

データダンプ&ロード

sql

テストのためにデータをコピーして、別テーブルにロードしたいなんてことがよくあります。 そんな時に使う方法。 テーブル丸ごとコピーしたい 素直にmysqldumpを使います。 スキーマ含め、丸ごとダンプ mysqldump -h[host] -u[user] [database] [table1] [ta…

ハイパフォーマンスMySQL

sql

実践ハイパフォーマンスMySQLを読んでの備忘メモ。 Innodb 主キーはデータと一緒に、主キー順でレコードが保存される(=クラスタインデックス) セカンダリインデックスには主キーが保存されるので、2段階の検索になる 従って、以下に注意する必要がある 主…

MySQLのロック/トランザクション機構メモ

sql

実践ハイパフォーマンスMySQL を読んで、基礎を学習中。備忘のためにメモ。 ロックとエンジン MySQLにはストレージエンジンがいくつかあるが、それぞれ使うロック方式が決まっている。 下にいくほど並行処理に強いが、その分だけ処理のオーバーヘッドが発生…

MySQL wait_timeoutの挙動

sql

アイドル状態(最後の実行から何もしていない)がN秒続くとMySQLが勝手に接続を切るらしい。 このN秒を設定するのがwait_timeoutである。 まず、デフォルト設定を確認してみる。 mysql -uroot -e'show variables' | egrep '(wait)'; -------- wait_timeout 2…

MySQL maxconnections

CentOSだと設定場所は/etc/my.cnf [mysqld] max_connections=100 perlからDBI使って、DBハンドル取得&SELECTした時にどういう挙動をするのか調べてみた。 実験に使ったプログラム。 #!/usr/bin/perl use strict; use DBI; use Parallel::ForkManager; #適当…

調べたことメモ

sql

unixtime⇔timestamp相互変換 select UNIX_TIMESTAMP('2008-11-06 10:10:10') select FROM_UNIXTIME(1225933810) timestampから年月抽出(199907が出力される) SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); datetimeよりもintのほうが速い http:…

調べたことメモ3

sql

ロックの種類 ロックの粒度によりテーブルロック、ページロック(メモリのセグメント)、行ロックの3つに分けることができる。MySQLのInnoDBは行ロックを採用している。 デッドロック 2つの異なるトランザクションにおいて、互いにロック解除を待機している…

調べたことメモ2

sql

サブクエリ 相関サブクエリと非相関サブクエリがある。 前者はサブクエリ内でメインクエリの列を参照しているもの。後者は単体で実行できるもの。 式が使える場所ならどこでも使える。 一時テーブル的にfromにも。 select * from user where user_id = (sele…

調べたことメモ

sql

distinct 指定した列の重複を除くキーワード。データの並べ替えが必要なので遅いらしい。 30万レコードくらいのデータで試してみる。 select distinct user_id, content from data; 299990 rows in set (7.82 sec) select user_id, content from data; 30000…

結合(JOIN)

sql

昔やったけど、うろ覚えだったので今回きちんと整理してみる。 結合には大きく分けて2種類。内部結合(INNER JOIN)と外部結合(OUTER JOIN)がある。 内部結合 結合条件に指定したidが両方のテーブルに存在する場合のみ結果セットに含める SQL構文はINNER JOIN …

よく使うコマンド

sql

実行結果をファイル出力 echo " select * from table limit 10; " | mysql -h*** -u*** database > ~/data.tsv IndexやDataのsizeを知る show table status from [db_name] like '[table_name]' \G テーブルスキーマを調べる show create table [table_name]…

Necessity to use Index

sql

SQLに疎いのでインデックスの有無によりどれくらいレスポンスが違うのか試してみた。 スキーマはこんな感じ。post_dataにはuser_id, post_dateでインデックスを張る。 create table post_data ( post_id int unsigned not null, #投稿ID user_id int unsigne…