タグ

MySQLに関するsanpo7のブックマーク (49)

  • なぜMySQLのサブクエリは遅いのか。

    よくMySQLはサブクエリが弱いと言われるが、これは当だろうか?半分は当で半分は嘘である。MySQLのサブクエリだってなんでもかんでも遅いわけではない。落とし穴をしっかり避け、使いどころを間違えなければサブクエリも高速に実行できるのである。今日はMySQLがどんな風にサブクエリを実行し、どのような場合に遅いのかということについて説明しよう。 EXPLAINで実行計画を調べた際に、select_typeにはクエリの種類が表示されるのだが、代表的なサブクエリには次の3つのパターンがある。 SUBQUERY DEPENDENT SUBQUERY DERIVED 結論から言おう。遅いのは2番目、DEPENDENT SUBQUERYである。DEPENDENT SUBQUERYとはいわゆる相関サブクエリに相当するもので、サブクエリにおいて外部クエリのカラムを参照しているサブクエリのことである。そし

    なぜMySQLのサブクエリは遅いのか。
    sanpo7
    sanpo7 2009/03/25
  • oinume journal

    大規模なコードベースでリファクタリングを省エネ化するためにcodemodを最近調べていて、軽く試行錯誤したのでそのメモ。 やりたいこと 例えば以下のようなTable Driven TestなコードをBEFOREからAFTERに書き換えたい。コード量が多いため人間がやるのは現実的ではなく、codemodで機械的に書き換えたい。 BEFORE package main import ( "slices" "testing" ) func TestContains(t *testing.T) { type args struct { ss []string s string } tests := []struct { name string args args want bool }{ { name: "empty: false", args: args{[]string{}, ""}, wan

    oinume journal
  • 漢(オトコ)のコンピュータ道: MySQLを高速化する10の方法

    ちょっとキャッチ−なタイトルをつけてしまったが、今日は独断と偏見でMySQLを高速化する方法を10個紹介しよう。MySQLサーバをチューニングするときや初期導入する場合などに参考にしてもらいたい。 1. バッファを増やす、または減らす チューニングの基中の基であるが、適切なバッファサイズを設定することはパフォーマンスチューニングの要である。主なバッファは次の通り。 innodb_buffer_pool_size・・・InnoDBだけを利用する場合は空きメモリの7〜8割程度を割り当てる最も重要なバッファである。余談だが、実際にはここで割り当てた値の5〜10%ぐらいを多めにメモリを使うので注意が必要だ。 key_buffer_size・・・MyISAMだけを利用する場合は、空きメモリの3割程度を割り当てるといい。残りはファイルシステムのキャッシュ用に残しておこう。 sort_buffer_

    漢(オトコ)のコンピュータ道: MySQLを高速化する10の方法
    sanpo7
    sanpo7 2009/02/19
  • MySQLによるデータウェアハウス構築

    ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog こんにちは、オークション事業部のWangです。 データウェアハウス(以下DWH)という言葉になじみのない方は検索していただいたほうがよいかもしれません。 検索するのがめんどい、という方は、かみ砕いた表現ができなくて恐縮ですが、 基幹系システムから抽出したデータを目的をもって再構成し、 使用可能な状態に保管されたデータの集合体、とお考えください。 オークションでは、具体的には出品、入札、落札などのトランザクションデータや、 それをいろいろな単位で集計したデータなどが該当します。 ここでいう単位というのはたとえば、日ごと、週ごと、月ごとや、以前の記事でも紹介されている カテゴリといったものになります。 こういったデータは、運用、運営、

    MySQLによるデータウェアハウス構築
    sanpo7
    sanpo7 2009/02/10
  • テーブルのコピー

    テーブルの構造そのものはCREATE TABLEで作る必要があります。 しかし、中身のデータに関しては、SELECT~INSERTを繰り返さなくても以下のように一行で済ませることができます。 INSERT INTO `TO_DB`.`TO_TABLE` SELECT * FROM `FROM_DB`.`FROM_TABLE`; この場合は、FROM_DBというデータベースのFROM_TABLEというテーブルの中身(データ全て)をTO_DBというデータベースのTO_TABLEというテーブルに丸ごとコピーするということになります。

    テーブルのコピー
    sanpo7
    sanpo7 2008/11/12
    テーブルのコピー
  • MySQL|プログラムメモ

    テーブルに ユニーク制約を追加するには ALTER TABLE table_name ADD CONSTRAINT UNIQUE(column_name); と記述します。 SELECT時に日付カラム( 2007-01-23 12:30:59 )を年・月・日に分解して取得すると便利です。 SELECT DATE_FORMAT(CurDate(),'%Y') as year , DATE_FORMAT(CurDate(),'%m') as month , DATE_FORMAT(CurDate(),'%d') as day DATE_FORMAT のオプション(指定子)は以下の通り 指定子 説明 %M 月の名前(January..December)。 %W 曜日名(Sunday..Saturday)。 %D 英語のサフィックス付きの日付(0th、1st、2nd、3rd など)。 %Y 4 桁

    sanpo7
    sanpo7 2008/10/27
  • MySQL FULLTEXT Ngram : LIKE検索より数十倍高速な、お手軽 日本語全文検索 について|blog|たたみラボ

    tatamilab.jp

    sanpo7
    sanpo7 2008/10/22
  • MySQL Cluster近況

    先日のDevMeetingで見てきたものの中で、最も興味深いのはMySQL Clusterのオンラインノード追加であろう。DevMeetingではJonasができあがっているところまでデモをしてくれたのだが、まったくもって素晴らしい。彼のブログ(下記)に詳細が載っているが、あえてここでも紹介したいと思う。 http://jonasoreland.blogspot.com/2008/08/status-of-createdrop-nodegroup.html これまでMySQL Clusterを使わない、もしくは避けてきたユーザが口を揃えて言うセリフは「だってデータノードを動的に増やせないでしょ?!」であった。しかし、近い将来にリリースされるバージョンでは、オンラインノード追加という機能が追加される予定である。これは平たく言うとオンラインでデータノードを追加する機能である。(そのまんまやんけ

    MySQL Cluster近況
    sanpo7
    sanpo7 2008/10/09
  • MySQLの照合順序:utf8_unicode_ciってなんぞ?: CodeIgniterで発火する?

    前回はヴァリデートのコードをそれぞれのメソッドの頭に記述して、なんちゃって入力チェックのようなことをやった経緯を書きました。あんな実装でも変なエラーが出なくなってきたので、まあヨシとしてます。 んで、ようやく今回は検索機能の強化?について書けるかな?と考えていたんですが、どうやろうか?などと思案しながらスクリプトをいじっていると奇妙な現象?に遭遇したので、検索機能の強化はまた後回しにして今回はそれについて書きます。 結論から言うと自分がMySQLの照合順序なるものを全く理解していなかったというだけの話です。「あ~それね」「今更何言ってんの?」と言い切れる方は以下は読む必要はありません。なので以下は個人的なメモです(愚痴とも言う…マタカヨ)。 まず奇妙な現象というのは以下のようなモノです。 例の五十音パッドで「た」で始まる新市町村を検索します。 伊達市 2006-03-01 大仙市 2005

  • ActionScript 3 MySQL library

    May 7, 2007 One of the questions that comes up around Apollo is whether it will have built in support for connecting directly to databases, such as MySQL. We are not building in native support for connecting directly to external databases, but it is possible for someone to write ActionScript libraries to connect directly to the database. Well, Matt MacLean has been doing just that, and has release

  • http://ntt.cc/2008/02/01/actionscript-mysql-driver-assql-access-database-from-flex.html

  • http://www.drasticdata.nl/DDHome.php

  • IDEA * IDEA

    ドットインストール代表のライフハックブログ

    IDEA * IDEA
  • Apache/PHP/MySQLなどをWindowsに一発でインストールできる「VertrigoServ」 - GIGAZINE

    Apache/PHP/MySQL/SQLite/SQLiteManage/PhpMyAdmin/Zend OptimizerをWindowsにまとめてオールインワンでインストールすることができるようになっているのがオープンソースで開発されているこの「VertrigoServ」。 これらの各ソフトについて簡単に設定を変更できるコントロールパネルっぽいものがタスクトレイから一発で呼び出せるようになっており、非常に設定が簡単です。また、インストーラは日語化されているので安心です。 実際のインストール方法などは以下から。 VertrigoServ http://vertrigo.sourceforge.net/ ダウンロードしたら実行します 「OK」をクリック 「次へ」をクリック 「同意する」をクリック 「次へ」をクリック さらに「次へ」をクリック 「インストール」をクリック インストール中……

    Apache/PHP/MySQLなどをWindowsに一発でインストールできる「VertrigoServ」 - GIGAZINE
  • MySQL、新ストレージエンジンMaria投入 - InnoDBは? | エンタープライズ | マイコミジャーナル

    CTO at MySQL, Founder and original developer of MySQL, Michael Widenius氏は27日(米国時間)、自身のブログにおいてMySQLの新しいデータベースエンジンMariaを公表した。MariaはGuilhem氏、Sanja氏、Sergei氏、Widenius氏によって2年間にわたって取り組まれた新しいストレージエンジン。ただしフルタイムで開発が実施されたのは直前の4ヵ月間だとされている。 今回公表されたMaria 1.0系はbitkeeper経由で公開されている。バイナリでの配布は時期をみて実施されるようだ。1.0はクオリティ向上を主目的としたブランチで、開発者にはMaria 1.0を試してバグを報告してほしいと報告されている。 MySQLは複数のデータベースエンジンを使える。今回公開されたMariaはストレージエンジンとして

  • mysqlコマンドで、テーブル名とかカラム名の補完(completion)をする方法 - (ひ)メモ

    追記: rehash(auto-rehashも含む)すると、SQL文の補完(seleでタブ打鍵とか)が効かなくなるよと、はす向かいの人に教えてもらいました。 個人的には、SQLは「mysql> help select」とかでオンラインヘルプがびょっと出るので、スキーマの補完ができるんならSQLの補完はとりあえずあきらめてもいいかなと思っています。 常々、テーブル名とか補完できるといいなーと思っていたので、ボロっときいてみたら教えてもらいました。あざーーーーっす! id:mikihoshi++ id:tokuhirom++ id:precuredaisuki++ おかげで効率が300%上がりました。(Benchmark::Stopwatchで計測) http://dev.mysql.com/doc/refman/5.1/en/mysql-command-options.html#option

    mysqlコマンドで、テーブル名とかカラム名の補完(completion)をする方法 - (ひ)メモ
  • ウノウラボ Unoh Labs: MySQL オペミスでデータが破損してしまった場合の復旧方法

    こんにちは satoです。 オペミスで update に where句を付け忘れたり、プログラムのバグでデータが破損してしまったりした場合でも、バイナリログには更新SQLがすべて書き込まれるので、バックアップデータからオペミスが起こるまでの全てのSQLを流し込めれば、元の状態に戻すことは可能です。 •バイナリログを取っている •オンラインバックアップをとっている(mysqldumpMySQLを止めた状態でのcpによるバックアップとバイナリログ) •バックアップ時点でのバイナリログの書き込み位置を保存している 以上のような状態でデータが壊れた時の復旧手順をまとめてみました。シナリオとして •ある1カラム email をupdateしようとしたら、間違ってwhere 句を付け忘れ 全レコードをupdateしてしまった •気がついたのが半日後 というオペミスが発生したとします 1) データベー

  • MySQLノウハウ

    いろいろなからメモってきたメモのメモ。出典を書いておくのを忘れた。思い出し次第補完するかも。 deleteのコストは高いので、無効化を示すフィールドを作ってupdateすべき slow query logに要注意 多くのエントリでほとんどのフィールドが同じ値を持つ場合はインデックスの効果が小さい →複合インデックスの効果が大きい 複合インデックスは指定の順番が大切。AとBという指定の場合、A単独でもインデックスの効果がある。逆は真でない。 インデックスが使われる場面は フィールド値を定数と比較するとき (where name = 'hogehoge') フィールド値でJOINするとき (where a.name = b.name) フィールド値の範囲を求めるとき (<,>,between) LIKE句が文字列から始まるとき (where name like 'hoge%') min(),

  • 更新があるシステムにはInnoDBを選ぼう。MyISAMを選択するならそれなりの理由が必要。それにInnoDBのパフォーマンスはそんなに悪くないよ。 || パフォーマンスチューニングBlog: インターオフ

    AWSアドバンスドコンサルティングパートナーの一員として活動する株式会社スタイルズが、AWS導入、移行、開発、セキュリティ、運用保守など、すべてのご相談に乗らせていただきます。 AWSを導入したいが何から始めたらいいかわからない 既存のベンダーが新技術に弱く、良い提案がもらえない クラウドの導入にセキュリティの不安がある AWSをとりあえず導入したが、さらに活用していきたい 社内にAWSの知見を持っている人がいない AWSならではのシステム開発を詳しく知りたい

    更新があるシステムにはInnoDBを選ぼう。MyISAMを選択するならそれなりの理由が必要。それにInnoDBのパフォーマンスはそんなに悪くないよ。 || パフォーマンスチューニングBlog: インターオフ
  • Open Tech Press | MySQLデータのバックアップ方法

    2007年5月31日10:53 Tom-Adelstein、Bill-Lubanovic(2007年5月29日(火)) ファイルやディレクトリのバックアップは比較的簡単だが、データベースのバックアップとなると、いくつか特別な工夫を施す必要がある。ここではMySQLを取り上げているが、同じ原理はPostgreSQLやその他のリレーショナルデータベースにもあてはまる。 稿は、最近O’Reillyから出版された書籍『 Linux System Administration 』の抜粋。 MySQLサーバを休みなく稼働させ続ける必要がないなら、以下に示すような圧縮なしのオフラインバックアップ手法が手っとり早い。 MySQLサーバを停止させる。 # /etc/init.d/mysqld stop MySQLのデータファイルおよびディレクトリをコピーする。例えば、MySQLのデータディレクトリ/var

    Open Tech Press | MySQLデータのバックアップ方法