MySQL の初歩的 Tips 3つ

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 ファイルのできあがりです。

以上、初歩的なものも多かったですが、知らなかった方は是非試してみてください。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ