MySQL

MySQL高速化めも

1.コミット頻度を減らす 数千件単位で明示的にcomit 増やしすぎても効果ない 2.バルクインサート インサート文はまとめて(クエリ長を気にしつつ) × INSERT hoge INTO VALUES (1,'a'); INSERT hoge INTO VALUES (2,'b'); ... ○ INSERT hoge INTO VALUES (1,…

GROUP毎の上位N位抽出

MySQLでGROUP BYした時に最初のN件を抽出する方法メモ How to select the first/least/max row per group in SQL | Xaprb に載っているユーザ変数を使う方法が簡単そう テーブル +----+-------+ | id | chara | +----+-------+ | 1 | A | | 2 | C | | 3 | B …

大量INSERT

TableA(1000万件)から100万件をTableBにInsertしたい ・1件ずつコミット while ($i <= 1000000){ $sql=qq{ insert into TableB select id,str from TableA where id=$i }; $dbh->do($sql); $dbh->commit(); $i++; } 処理時間 16分58秒 ・1万件ずつコミット $…

ESCAPE BY

MySQLでテーブルに一部データが正常に登録されていない MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.5 LOAD DATA INFILE 構文 \はデフォルトのエスケープ文字として読まれているらしい LOAD DATA LOCAL INFILE 'FILEPATH' INTO TABLE TABLE FIELDS E…

複数のCOUNT

条件の異なる複数のCOUNTを1クエリでやりたい select count(1), count(if(a=0,1,null)), count(if(b>0,1,null)) from test 【SQL】複数の条件のcountを1回の問い合わせでおこなう at softelメモ

InnoDBでTRUNCATEした時のibdファイル

古いInnoDBではテーブルをTRUNCATEしてもibdファイルは再利用用にのこるらしい 古いバージョンのInnoDBだとTRUNCATE TABLEしてもデータファイルのサイズが減らない件 - shimxmemo 検証 テーブル作成して適当にデータを入れる CREATE TABLE test (hoge VARCHA…

テーブル作成時InnoDBが勝手にMyISAMになる

InnoDBが有効か確認 mysql> show variables like 'have_innodb' +---------------+-------+ Variable_name Value +---------------+-------+ have_innodb NO +---------------+-------+ 1 row in set (0.00 sec) なってない ログを見てみる InnoDB: Error: l…

mysqlのコマンド

mysql周りの調査で使ったコマンドめも SHOW STATUS ステータス確認 SHOW VARIABLES 設定されている変数値確認 SHOW [FULL] PROCESSLIST 実行中のプロセスリストを表示 SET [GLOBAL/SESSION] (変数名)=(値) 変数値を設定する