2007-09-06 00:54:24

mysqlの便利だけど忘れるコマンド

[MySQL]

チェック
check table country,format,stock;

チェック2
check table goods extended;

リペア
repair table country,format,stock;

最適化
optimize table country,format,stock;

インデックスのみ最適化
analyze table country,format,stock;

置換
update goods set review=REPLACE(review,'&lt;','<');
update goods set format=REPLACE(format,'&quot;','"');
update goods set title=REPLACE(title,'&amp;','&');

ファイル書き出し(エクスポート)
select * into outfile '/home/user/country.sql' from country;

インデックス確認
show index from goods;

インデックス作成
create index open_date_index on goods (open_date);
create index open_close_index on goods (open_date,close_date);

インデックス削除
drop index open_date_index on goods;

スレーブ確認
show slave status \G;

インデックス動作確認
explain SELECT me.goods_id, me.title FROM goods me ORDER BY format \G;

テキストデータインポート(IGNORE で重複ユニークキースキップ)
LOAD DATA INFILE "/tmp/hoge.tab" IGNORE INTO TABLE hoge;

テーブル内容高速削除
TRUNCATE TABLE goods;

遅いログの記録設定
vim /etc/my.cnf
set-variable=log-slow-queries=/var/log/slowsql.log
set-variable=long_query_time=1 ←1秒以上かかったコマンドの記録
set-variable=log-queries-not-using-indexes ←インデックスを使用しないコマンドの記録

スレーブ開始
ex)http://www.irori.org/doc/mysql-rep.html
mysql> CHANGE MASTER TO
    -> MASTER_HOST = 'mymaster',
    -> MASTER_USER = 'repl',
    -> MASTER_PASSWORD = 'qa55wd',
    -> MASTER_LOG_FILE = 'mymaster-bin.001',
    -> MASTER_LOG_POS = 359;
mysql> START SLAVE;

スレイブストップ
STOP SLAVE;

カラムを最後に追加する
ALTER TABLE テーブル名 ADD 追加するカラム名 型;

JOIN 使いつつ ORDER BY で別テーブルの複数キーを指定すると非常に遅い。
非正規化するのが吉。

文字列連結
SELECT CONCAT(name_en, ' ', name_jp) FROM goods WHERE id='X55';
ex)http://dev.mysql.com/doc/refman/5.1/ja/string-functions.html

サブクエリでアップデート+文字列連結
UPDATE goods_data SET search_name = (SELECT CONCAT(name_en, ' ', name_jp) FROM goods WHERE id=goods_data.goods);

使えるテーブルタイプ一覧表示
SHOW TABLE TYPES;

テーブルステータス表示
SHOW TABLE STATUS;