Hatena::Groupcside

Cside::StudyMemo このページをアンテナに追加 RSSフィード

メインブログに書くまでもない自分用メモを垂れ流す。日々是勉強也。

カテゴリー

2013-08-29

[]レコード数が極端に少ないテーブルでEXPLAINするべきでない

オプティマイザが「全件走査したほうが早い」と判断して、PRIMARYでさえも無視されることがある。無視された。

レコードを1000件くらいに増やしたら、きちんと意図したインデックスが使われていた。

2013-03-11

[]MySQLでデータを全件削除後、auto_incrementの値をリセットする

DELETE FROM table;
ALTER TABLE table AUTO_INCREMENT =1;

2013-01-23

[]MySQLの集計について覚え書き

  • case文使えばかなりのことができる
  • distinctは複数カラムを指定できる(複数カラムでユニーク数をとれる)
  • group byは複数カラムを指定できる(Excelのピボットテーブルみたいなことができる)

 

[]クエリの実行結果をファイルに書き出す

echo "SELECT id, name, height FROM friend" | mysql -u cside mydb > output.tsv

2013-01-12

[]MySQLで日付ごとに集計する

テーブル my_table のカラム created_at にunix timeが格納されてる場合、こんなふうにしてる。

SELECT
    COUNT(*),
    SUBSTRING( FROM_UNIXTIME(created_at), 1, 10 ) AS datetime
FROM
    my_table
GROUP BY
    datetime

のだけど、他にもっとうまい方法あるのかなぁ

2012-06-07

[]メモ: DBひく際の注意点

  • 絞り込み処理は、アプリケーション側でなく、(インデックスきいてる限り)SQLのWHERE条件でなるべくすませたほうがよい
  • DBの転送量的な意味で

2012-05-22

[]ある名前のカラムを持っているテーブルを洗い出す

@limitusus に教えてもらった。


user_id という名前のカラムを持ってるテーブルを洗い出す例

select column_name, table_name, table_schema
from  information_schema.columns
where column_name = 'user_id';

2012-05-10

[]mysqlで unix time -> datetime の相互変換

いつも忘れる

SELECT FROM_UNIXTIME( col_unix_time ) FROM table;
+-------------------------+
| from_unixtime( col_unix_time) |
+-------------------------+
| 2012-01-02 00:00:00     |
| 2012-01-03 00:00:00     |
| 2012-01-04 00:00:00     |
+-------------------------+

ちなみに逆は UNIX_TIMESTAMP('1997-10-04 22:23:00')

http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html


あと関係ないけどPerlでは Time::Piece::localtime($unix_time)->datetime

2012-03-06

[]Macにmysqlをインストール

homebrewから入れたやつだとmysqldの起動にこけて、原因を調べるも分からずだいぶはまった。(今更mysqlのセットアップごときではまるとは情けない…。)


Macならばパッケージ版のmysqlを入れればシステム環境設定などからmysqlサーバの起動/停止などができ、非常に楽。素直にこれを入れるとよい。


参考: ttp://www.rk-k.com/archives/1255