2011年5月11日水曜日

mySQLについてのメモ

mySQLのINTのMAX値

  • Unsigned で、4G(40億)

mySQLでの正規表現の利用

  • 正規表現は where `name` REGEXP 'a*' のように使用する

mySQLのvarchar、textの比較について

  • インデックスを張る場合255文字以内のキー長を指定する必要がある

他のDBのテーブルを参照するには

  • 同じmySQLサーバ内なら、select * from db_name.table_nameでOK

他のDBのテーブルとJOINできるか

  • 下記のように普通にJOINできる
    SELECT * FROM `mytable` join `dbname`.`atable` A on `mytable`.`id`=A.`id`

synonymはあるか

  • 無い。
    viewを使えば同様のことができる。オーバーヘッドが問題にならないか注意して使う

日付時刻を丸める関数(TRUNCなど)はあるか

  • 日付丸め専用の関数はない。
  • 文字列にフォーマットして丸める例はよく見かける
  • 計算式で丸める例
     時間:DATE(`date`)+INTERVAL HOUR(`date`) HOUR
     日: DATE(`date`)
     週: DATE(`date`)-INTERVAL DAYOFWEEK(`date`)-1 DAY
     月: DATE(`date`)-INTERVAL DAYOFMONTH(`date`)-1 DAY

PostgreSqlにある「関数(式)インデックス」はあるか

  • 無い。→インデックスを使いたい式を展開した列が必要

タイムゾーンはDBもしくは接続毎に再指定可能か
  • 可能
    mysql> set time_zone = '-7:00';
    Query OK, 0 rows affected (0.00 sec)

    mysql> select now();
    +---------------------+
    | now() |
    +---------------------+
    | 2011-05-05 22:21:37 |
    +---------------------+
    1 row in set (0.00 sec)

    mysql> set time_zone='+9:00' ;
    Query OK, 0 rows affected (0.00 sec)

    mysql> select now();
    +---------------------+
    | now() |
    +---------------------+
    | 2011-05-06 14:22:01 |
    +---------------------+
    1 row in set (0.00 sec)