タグ

TipsとMySQLに関するan-ironic-manのブックマーク (6)

  • tree-tips: MySQLで大量レコードのjoin | MySQL

    大量レコードのjoinは遅い 遅くなるのはMySQLだけなの? そんなことはありません。MySQLもPostgresもOracleSQLServerも遅くなります。 Oracleのオプティマイザは賢いですが、基的に大量レコードのjoinは避けるべきです。 何故遅くなるの? データ量が多すぎてテンポラリ領域を使う(バッファに乗り気らない)から、です。 何件くらいからjoinが遅くなるの? スキーマ構造によるので一概には言えませんが、大体1000件辺りから微妙に遅くなり、1万件を超えると一気に遅くなります。 1万件程度なら割と力技(マシンパワー)で何とかなるので、1万件を超えた辺りから注意してみて下さい。 よくある例では、ログを元にしたアクセスレポートの生成時に、大量レコードのjoinが必要になり易いかもしれませんね。 解決策 データ量を減らしてからjoinする。 データ量が多いならデータ

    an-ironic-man
    an-ironic-man 2014/06/03
    “スキーマ構造によるので一概には言えませんが、大体1000件辺りから微妙に遅くなり、1万件を超えると一気に遅くなります”。小刻みにSELECTしてUNION ALLするという発想はなかった。
  • mysqldumpの--whereオプションについて - tohnishi’s blog

    仕事関係で久々にMySQL(4.0.xx)を使うことになり、とあるサーバー(telnet/ssh、ftpのみ使用可)から別のサーバー(phpMyAdminのみ使用可)にデータをインポートするという作業を行ったのだが、移行元サーバーでのmysqldump実行結果ファイルが大きすぎるために移行先phpMyAdminでの取り込みが失敗するという問題が発生した。 そこでmysqldumpのオプション--whereを使って出力を指定数ごとに分割するスクリプトを書いてみたのだが、なんかどうも上手く動作しない。いろいろ調べたり試したりしているうち、参照していたmysqldumpマニュアルの--whereオプションの説明が変ではないか、ということに思い至った。 例えばdev.mysql.comの4.1系のmysqldumpコマンドのマニュアルでは、--whereオプションの記述は以下のとおりである。 -w

    mysqldumpの--whereオプションについて - tohnishi’s blog
    an-ironic-man
    an-ironic-man 2013/01/31
    mysqldump ... --where="column = 'hoge'"でcolumnの値がhogeのレコードのみダンプ。
  • MySQL CSVファイル入出力

    MYSQLでの「CSVファイル」の入出力(インポート、エクスポート)方法について記載しています。 WindowsLinuxのどちらの環境でもファイルパスの記載が変わるだけでコマンドは同一になります。 入力 LOAD DATA INFILE 「,」などで区切られたCSVファイルを用意することにより、MySQLに高速にデータを入力することができます。 文字の囲み文字が「”」のときの使用例です。 囲み文字が必要ないときはENCLOSED BY ‘”‘を外します。 構文 LOAD DATA INFILE "ファイル名" INTO TABLE テーブル名 FIELDS TERMINATED BY ',区切り文字' ENCLOSED BY '"';

    MySQL CSVファイル入出力
    an-ironic-man
    an-ironic-man 2012/09/25
    SELECT * FROM hoges INTO OUTFILE "hoges.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '""'; でCSV出力。楽ちん!
  • ruby on rails (Active Record)複数列をgroup by して countする方法 - ruby on rails ビジネスの可能性

    Active Recordで以下のようにcountを実行しても、複数列の値が取得できません。 Message.count(:group => "rcv_user_id, send_user_id") =>[[ 3, 2] , [ 4, 2]] ※一番最後に指定した列の値+行数 このような場合には、countを使わず、通常のfindを使用します。 Message.find(:all , :select => "count(*) count, rcv_user_id, send_user_id":group => "rcv_user_id, send_user_id") 結果をオブジェクト(インスタンス)から取得するときにも、countやメソッド名で取得できるので、ソースの可読性が良くなります。 もう、count使わないほうが良いカナと思ってしまいます。

    ruby on rails (Active Record)複数列をgroup by して countする方法 - ruby on rails ビジネスの可能性
    an-ironic-man
    an-ironic-man 2012/06/29
    Hoge.countの:groupオプションで複数カラムを指定してもダメ。自分でSELECT COUNT(*)を書く必要がある。ちぇっ(・д・)
  • MySQLがおかしい!あなたならどうしますか? – MySQL Casual Advent Calendar 2011 - As a Futurist...

    しわっす!DBA 兼オペレーションエンジニア兼タスクマネージャやってる riywo です。何のネタを書こうかなぁと考えたのですが、正直ネタを仕込む時間もなかったので僕がいつもやってることをさらっと紹介するということで勘弁して下さい>< MySQL がおかしい! 03:14 hidek: なんかエラー出まくってるんだけど! 03:14 zigorou: MySQL と通信してるとこっぽい 03:15 riywo: 見ます こんなやりとりは皆さん日常茶飯事ですよね?ね?ね?こんな時に、DB に責任を持つものとして真っ先に対応するのが僕らの仕事です。でも、じゃあ具体的にこのあと何をしましょう?既にサービスはエラーだらけで一刻を争う状態です。 (対応開始) まずはエラーメッセージ 今回の様な場合はアプリのエラーログにどばっと MySQL に関するエラーが出ているでしょう。まずはそれを見ることが始ま

    MySQLがおかしい!あなたならどうしますか? – MySQL Casual Advent Calendar 2011 - As a Futurist...
    an-ironic-man
    an-ironic-man 2011/12/03
    show create tableでカラムとインデックス両方の情報を見る。毎回descとshow indexしてたよorz
  • 「優れたMySQL DBAを見分ける27+3の質問」に対する回答例

    随分と更新が空いてしまったが、「優れたMySQL DBAを見分ける27+3の質問」に対する回答例(漢バージョン)を紹介しよう。実は質問を掲載した際「難しい!」というコメントが非常に多く、もう少し易しい質問にするべきだったかと思って次のように呟いてみたのだが・・・ 非常に心強くて安心した。さすがに日を代表するMySQLのエキスパートである。出題のレベルは間違ってはいなかった!! そんなわけで、回答の方に移ろう。 MySQLのサーバープロセスはいくつある?ひとつ。mysqldはシングルプロセス・マルチスレッドモデルを採用しているので、"サーバー"プロセスはひとつである。多くの場合、Linuxなどでmysqldを動かす場合には、お供にmysqld_safeも常に動いていることが多いが、mysqld_safeはサーバーではなく、mysqldのためのラッパーであるので数には含めない。 rootユー

    「優れたMySQL DBAを見分ける27+3の質問」に対する回答例
    an-ironic-man
    an-ironic-man 2011/04/14
    わかるようにならねばっ
  • 1