タグ

performanceとSQLに関するraimon49のブックマーク (50)

  • MySQLでインデックスを使って高速化するならCovering Indexが使えそう - (゚∀゚)o彡 sasata299's blog

    2009年10月28日09:33 MySQL MySQLでインデックスを使って高速化するならCovering Indexが使えそう Linux-DB システム構築/運用入門 (DB Magazine SELECTION) 著者:松信 嘉範 販売元:翔泳社 発売日:2009-09-17 おすすめ度: クチコミを見る 最近、このを読んでいます。非常に面白いし、参考になります〜。中でもインデックスについての記事が特に興味深かったので簡単にまとめてみます。 前提 ・インデックスは検索性能には効果があるが、更新性能は落ちてしまう ・MyISAM と InnoDB ではインデックスの構造が違う ・インデックスは B+Tree インデックスと呼ばれ、ルート、ブランチ、リーフの階層構造になっている ・インデックスはソートされた状態で作成されている まずは MyISAM と InnoDB でのインデックス

    raimon49
    raimon49 2010/12/28
    マルチカラムインデックスのキャッシュを使ってディスクアクセスさせない。Covering Index
  • おさかなラボ - PHPデベロッパがおかしがちな10のMySQL間違いがおかした間違い

    【レポート】PHPデベロッパがおかしがちな10のMySQL間違い | エンタープライズ | マイコミジャーナル という記事があったのですが、おや?と思う所があったのでツッコミを入れる。 ブラウザ側で動作するJavaScriptを使ったチェックに頼るのではなく、 サーバサイドのPHPでちゃんと検証すること。 PHPでの検証はあてにならない。Perlも然り。PHPには「サニタイズする」関数が沢山あるが、そういうものは安易に使わないようにしたほうがよい。「サニタイズ」ではなく「ヴァリデート」して、意図しない値はエラー、「来るはずがない」値はwarn()(だっけ?)でerror_logにログを吐いて死ぬように。ハカー以外ありえない人に普通の画面遷移見せるのはお人好しもいいところである。当然であるが、エラーログを画面に吐いて死ぬのは論外。 以上をちゃんとした上で、「必ず」プレースホルダを使う。鉄則。

    raimon49
    raimon49 2010/12/05
    >実は「*」はCOUNT()の中で展開されない。その代わりに全てのレコード数を最も早い方法でカウントする。*の代わりにPKを入れると「より早く」なるというのは都市伝説である(少なくともMySQL5.*以降)。 なお、もしもここにNU
  • SQLは最も高級言語 - SQLer 生島勘富 のブログ

    SQLは現在、普及している言語の中で最も高級な言語です。 高級か低級かというのは、どれだけCPU(の命令)と近いかです。CPUに近ければ近いほど低級でCPUから遠い、つまり、人間に近いほど高級言語ということになり、一般的に低級ほど扱うのは難しくなります。 例えば、JavaではJava VMがCPUの違いだけでなく、OSの違いまでを吸収してくれます。しかし、より低級なC言語と全く同じ処理を書いたのと比べれば、Javaでコンパイルされたコードは冗長になるため実行速度が遅くなりますが、高級な言語ほどシンプルなソースで書けるから生産性は高くなります。 生産性とパフォーマンスについて 理論値としては、同じ処理を低級言語と高級言語で書けば、生産性は高級言語ほど高くなります。 では、アセンブリ言語ができる人が同じ処理をJavaで書いたとして生産性が上がるかというと、Javaもできるなら生産性は上がります

    SQLは最も高級言語 - SQLer 生島勘富 のブログ
    raimon49
    raimon49 2010/11/23
    土俵の違い。ごちゃごちゃにしている人は確かに居る。
  • Hiveクエリチューニングメモ - 科学と非科学の迷宮

    Hadoop2版を買ったその一週間後にDeals of the day で半額セールやられて死にたくなったので腹いせに書く はじめに ここに書いてあるのは全部参考リンク・文献からひっぱってきただけで、ほとんど全部検証してない。間違いがあればなるべく早めに更新するよう努力はするが、鵜呑みにして何が起きても自己責任で。 Hive のクエリチューニングに関するメモ書きである。以下のことは「書いていない」 Hadoop自体のチューニング Hive のクエリチューニング以外の話 例えば、圧縮ファイルを Hive 上で扱うにはどうするかとか JOIN 一番左のテーブルに最も大きなテーブルを持ってくる 一番左のテーブルがMRでいう入力データとして流れる。インナーテーブルのデータはメモリに保持される。 同一 JOIN キー 通常は 1 JOIN = 1 MR ジョブだが、同一の JOIN キーを使ってい

    Hiveクエリチューニングメモ - 科学と非科学の迷宮
    raimon49
    raimon49 2010/11/20
    JOIN句 最も大きなテーブルを1番左に
  • ソーシャルゲームのためのMySQL入門 | BLOG - DeNA Engineering

    こんにちはこんにちは。最近お腹痛いばっかり言ってることで有名なiwanagaです。 DeNAは外部的にはプラットフォーム的な部分の方がフィーチャーされることが多いですが、実はソーシャルゲームの提供も行っています。怪盗ロワイヤルとか、どこかで聞いたことがあるのではないでしょうか。 僕はDeNAでソーシャルゲームが誕生した辺りからずっとサーバサイドを見てきましたが、そんな運用の中で自分が貯めてきた知見とかTIPSをご紹介したいと思います。 かれこれ10タイトル近くはレビューしたり運用したりしてるため結構言いたいことはいっぱいあるので、小出しにしつつ評判よければ次も書きます。 ソーシャルゲームのためのMySQL入門一覧 ソーシャルゲームのためのMySQL入門 - Technology of DeNA ソーシャルゲームのためのMySQL入門2 - Technology of DeNA 「MySQL

    ソーシャルゲームのためのMySQL入門 | BLOG - DeNA Engineering
    raimon49
    raimon49 2010/11/16
    InnoDBで大規模データをストアする際のコツ、パーティショニングの利点紹介など。ログ系のテーブル設計の勘所や採番テーブルによるid払い出しは、ソーシャルゲームに限らず普遍的に役立つDB設計の基礎知識。軽妙な語り
  • 【Visual Studio Code】1.0 GAリリース予定日、決定! - 好きな技術を好きと言える幸せ - AYA TOKURA BLOG - Site Home - MSDN Blogs

    In Visual Studio 2022 17.10 Preview 2, we’ve introduced some UX updates and usability improvements to the Connection Manager. With these updates we provide a more seamless experience when connecting to remote systems and/or debugging failed connections. Please install the latest Preview to try it out. Read on to learn what the Connection ...

    【Visual Studio Code】1.0 GAリリース予定日、決定! - 好きな技術を好きと言える幸せ - AYA TOKURA BLOG - Site Home - MSDN Blogs
    raimon49
    raimon49 2010/08/02
    検査例外(Checked Exception)と実行時例外(Runtime Exception)のうち、.NETで扱える例外は後者のみである点のメリット・デメリット、Javaとの比較など。SqlExceptionはJavaでは検査例外だが.NETでは実行時例外という違いも。良記事。
  • SQLer 生島勘富 の日記

    raimon49
    raimon49 2010/06/24
    とにかくLIKE検索を行ってしまうつくり
  • なぜMySQLのサブクエリは遅いのか。

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

    なぜMySQLのサブクエリは遅いのか。
    raimon49
    raimon49 2010/02/09
    相関サブクエリとして評価されている時はサブクエリが返すカラムに対してインデックスを付けてやる。
  • MySQLのEXPLAINを徹底解説!!

    以前、MySQLを高速化する10の方法という投稿で「EXPLAINの見方についてはいずれ解説しようと思う」と書いてしまったので、今日はその公約?を果たそうと思う。 MySQLのチューニングで最も大切なのは、クエリとスキーマの最適化である。スキーマの設計は一度決めてしまうとそのテーブルを利用する全てのクエリに影響してしまうためなかなか変更することは出来ないが、クエリはそのクエリだけを書き直せば良いので変更の敷居は低い。そして遅いクエリをなくすことは、性能を大幅に向上させるための最も有効な手段である。従って、アプリケーションの性能を向上させたいなら、まず最初にクエリのチューニングを検討するべきなのである。 最適化するべきクエリはスロークエリログやクエリアナライザで見付けられるが、ではそのようなクエリが見つかった場合にはどのように最適化すればいいのか?そのためにはまず現在どのようにクエリが実行さ

    MySQLのEXPLAINを徹底解説!!
    raimon49
    raimon49 2009/03/31
    クエリ最適化。サブクエリの場合はselect_typeがSUBQUERYだと結果がキャッシュされ, DEPENDENT SUBQUERYでは外部クエリの結果に対して毎回評価される。サブクエリの最適化を見ると良い。typeのカラムにindexとALLを見たら要注意。
  • MySQLの最適化

    限りなく眠気を誘うPHP Internalsのセッションから逃げる。こっちの 講師はMySQL.comの人。講演慣れしていて、ずっとまともでプロフェッショナルな 感じ。午前中を逃したのが惜しいが、詳しいプレゼン資料は後日公開される らしい。 DELETEのコストはかなり高い 読みだしがすごく多い場合は無効化を示すフィールドを作りUPDATEすべき、 index更新のコストが馬鹿にならないSHOW STATUSの表示結果の解析方法 起動ごとに初期化、全データベースに共通rnd と rnd_next の割合Key_reads : Key_read_requests 、ディスクから読まれた回数:総回数 この割合が1:100より悪くなったら要注意Key_write_requests:Key_writes 総書き込み要求回数:ディスクに書き込ま れた回数 キャッシュの効果などMax_used_con

    raimon49
    raimon49 2008/04/15
    インデックスを使ってもらう為のSQL最適化など、他のRDBMSでも有用なノウハウが沢山。2001年の記事らしい。DBは絶対に時間を投資しておくべき知識だなぁ。長く財産になる。