タグ

プログラミングと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 :: MySQL 8.0 リファレンスマニュアル :: 13.2.6.2 INSERT ... ON DUPLICATE KEY UPDATE ステートメント

    SAVEPOINT、ROLLBACK TO SAVEPOINT および RELEASE SAVEPOINT ステートメント

    an-ironic-man
    an-ironic-man 2012/11/08
    「もし ON DUPLICATE KEY UPDATE を指定し、UNIQUE インデックスか PRIMARY KEY 内で複製値を引き起こす行が挿入されると、古い行の UPDATE が実行されます」
  • 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の知っていると便利な構文(その2)|株式会社 フラッツ

    谷口です。 今回はMySQLで知っていると便利な構文その2として、集計時に便利な構文を紹介します。 集計をする際は、主にGROUP BYを多く用いると思いますので、そこに焦点を当てて説明します。 説明の準備 日付関数 WITH ROLLUP オプション 数値実験(時間測定) 説明の準備 次のようなカラム構成のテーブルがあるとして、以下説明します。 テーブル名: order * id: int(11) product: varchar(32) ordered_at: datetime price: int(11) quantity: int(11) 日付関数 MySQLの組み込み関数には日付操作用の関数が多数用意されてます。 日付関数によるGROUP BY 節の指定も可能で、なかなか使い勝手が良いです。 ordered_atという日付のカラムに対し、日付関数を用いて様々な期間での集計が

    an-ironic-man
    an-ironic-man 2011/08/25
    EXTRACTで日付時刻データの一部を返すstrftime的な何か
  • 1