MySQL

【MySQL】limitとbetweenのパフォーマンス差。

ちょっとしたネタ。

例えばID順に並んでいるデータをlimit 1000, 100とする場合、
where句以降を、id between 1000 and 1100 order by id とするほうが早いとのこと。

そもそもlimitはデータを1000個目から100個取得という処理を行うのではなく
1100個のデータを取得してから1000個のデータを捨てるという処理を行う。
そのため、limit句はオフセットの個数が増えてくるとパフォーマンスが低下してしまうのである。

全ての状況で使えるわけではないけれども、パフォーマンスに少しでも拘る場面では有効だね。

 

【MySQL】現在の時刻をコンテクストに合わせた形式で取得する。

関数がストリングで使用されているか、もしくは数値コンテキストで使用されているかによって、
現在の日付を ‘YYYY-MM-DD’ または YYYYMMDD フォーマットの値で返却する。

select curdate();

↓

'1997-12-15'


select curdate() + 0;

↓

19971215

 

【MySQL】カラムの平均値を求める。

avg()関数を用いる。

select avg(col_name) from table_name

グループ句と組み合わせることも可能

select avg(col_name) from table_name group by hoge

スクリプト言語を通さずに平均値を求めることが可能。

めっちゃ便利。

 

【MySQL】MySQLサーバーの稼働状況を確認する。

ターミナルより下記コマンドで確認可能。

mysqladmin status

パスワード無しじゃダメだよと怒られたら下記のようにする。

mysqladmin status -u [ユーザー名] -p

そしてパスワードを入力すればOK。

すると下記のような結果が得られる。

Uptime: 2330160  Threads: 1  Questions: 1310067  Slow queries: 4  Opens: 10621  Flush tables: 1  Open tables: 57  Queries per second avg: 0.562

各項目の詳細は下記の通り。

Uptime : 起動からの総稼働秒数

Threads : MySQLが使用しているスレッドの数。これと併せて表面上表示されない管理用スレッドがプラス3つ動作している

Questions : 起動時からの総問い合わせ数

Slow queries : スロークエリーと見なす設定時間を越えた問い合わせの数

Opens : 起動してから開かれたテーブルの数

Flush tables : flush、refresh、reloadの実行回数

Open tables : 現時点で開かれているテーブルの数

Queries per second avg : 問い合わせ平均応答秒数

さらに詳しい稼働状況を知りたい場合は下記の通り。

mysqladmin extended-status

上記で得られる情報の詳細は公式を参照されたし。

 

【MySQL】MySQLサーバーが生きているか否かを判定する。

下記コマンドを実行すればOK。

mysqladmin ping

↓

mysqld is alive
# このように表示されれば絶賛稼働中

 

【MySQL】テーブルのカラム一覧をコメントも含め取得する。

めも。

まずは簡単に。

show full columns from [テーブル名];

テーブル情報をINFORMATION_SCHEMAテーブルからごっそり取得したい場合は下記。

select * from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = [DB名] and TABLE_NAME = [テーブル名] order by TABLE_NAME;

 

【MySQL】テーブルのカラム一覧を取得する。

めも。

下記

describe [テーブル名]

もしくは下記

show columns from [テーブル名]

で取得可能。

 

【MySQL】文字列を指定した型にキャストする。

めも。

例えばこんな感じ。(datetimeをdateに)

select cast('2014-04-07 23:23:23' as date);

↓

2014-04-07