MySQL の初歩的 Tips 3つ
シーブレインでは、データベースは主に MySQL を使用しています。
MySQLを使用する際に、知っておくと便利なTipsを3つご紹介します。
Tips と言っても、フツーにマニュアルに載っているものなのですが、
意外と知られていない物もあるようなのでまとめてみました。
\G
クエリの最後に、「\G」をつけると、縦に並んで表示されます。 1つのデータにたくさんのカラムがある場合などに便利です。mysql> SELECT * FROM member;
+------+----------+--------+------+---------+------------+
| id | name | gender | age | blood | post |
+------+----------+--------+------+---------+------------+
| 1 | tanaka | male | 25 | o | programmer |
| 2 | nakayama | male | 23 | unknown | designer |
+------+----------+--------+------+---------+------------+
2 rows in set (0.00 sec)
↓
mysql> SELECT * FROM member\G
*************************** 1. row ***************************
id: 1
name: tanaka
gender: male
age: 25
blood: o
post: programmer
*************************** 2. row ***************************
id: 2
name: nakayama
gender: male
age: 23
blood: unknown
post: designer
2 rows in set (0.00 sec)
データ量が少ない時などは、逆に冗長な感じになってしまうので、場合によって使い分けると良いと思います。
EXPLAIN
INDEX をはっている場合に、その INDEX が有効に働いているかどうかを調べることができます。 下記は「gender」のカラムに「member_gender」という INDEX をはった場合の例です。mysql> EXPLAIN SELECT * FROM member;
+----+-------------+--------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | member | ALL | NULL | NULL | NULL | NULL | 2 | |
+----+-------------+--------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM member WHERE gender = 'male';
+----+-------------+--------+------+---------------+---------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+---------------+---------------+---------+-------+------+-------------+
| 1 | SIMPLE | member | ref | member_gender | member_gender | 31 | const | 1 | Using where |
+----+-------------+--------+------+---------------+---------------+---------+-------+------+-------------+
1 row in set (0.00 sec)
「gender」をキーに抽出した場合に適切に INDEX が活用されているのがわかります。データの取得部分がボトルネックとなっている場合、これを利用して解消を目指します。
さらに、「\G」と複合すると見やすくなります。
mysql> EXPLAIN SELECT * FROM member WHERE gender = 'male'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: member
type: ref
possible_keys: member_gender
key: member_gender
key_len: 31
ref: const
rows: 1
Extra: Using where
1 row in set (0.00 sec)
INTO OUTFILE
最後に、データからのファイル出力です。 SELECT文の最後に「INTO OUTFILE」をつけ、ファイル名を指定すればデータの出力ができます。SELECT * FROM member INTO OUTFILE 'member.txt';
さらにこの構文では、「FIELDS TERMINATED BY」でデータの区切り文字を、「ENCLOSED BY」で囲い文字を指定できます。
これを利用して、
SELECT * FROM member INTO OUTFILE 'member.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"';
とすれば、カンタンに csv ファイルのできあがりです。
以上、初歩的なものも多かったですが、知らなかった方は是非試してみてください。