タグ

MySQLに関するshunpyのブックマーク (16)

  • MySQL with InnoDB のインデックスの基礎知識とありがちな間違い - クックパッド開発者ブログ

    こんにちは、サービス開発部の荒引 (@a_bicky) です。 突然ですが、RDBMS の既存のテーブルを見てみたら「何でこんなにインデックスだらけなの?」みたいな経験はありませんか?不要なインデックスは容量を圧迫したり、挿入が遅くなったりと良いことがありません。 そんなわけで、今回はレコードを検索するために必要なインデックスの基礎知識と、よく見かける不適切なインデックスについて解説します。クックパッドでは Rails のデータベースとして主に MySQL 5.6、MySQL のストレージエンジンとして主に InnoDB を使っているので、MySQL 5.6 の InnoDB について解説します。 InnoDB のインデックスに関する基礎知識 インデックスの構造 (B+ 木) InnoDB では B+ 木が使われています。B+ 木は次のような特徴を持った木構造です。 次数を b とすると、

    MySQL with InnoDB のインデックスの基礎知識とありがちな間違い - クックパッド開発者ブログ
  • Mysqlでinsert、delete、updateが遅い場合の対策 - Qiita

    insert 遅い原因 insertする際に、対象テーブルのインデックスブロックを読み込んで、 更新かけるので、インデックスサイズが大きいと、パフォーマンスが落ちる。 なので、テーブルのデータ増加が原因で、I/Oが発生し、徐々に遅くなっていく。 インメモリで処理できなくなると、突如としてパフォーマンスに影響が出やすい 対策 テーブルサイズをできるだけ小さく(レコード長を小さく) インデックスサイズを小さくすること(無闇にインデックス貼らない) パーティショニング(DB間のテーブル移動) 不要データ削除 16KB毎(たぶん)のブロック単位でデータを保持しているので、 断片化されたデータを削除しても効果が薄いです。 Auto Incrementの場合は、ID1〜10000等をまとめて削除する等であれば、効果が期待できます。 ただし、ただし次のインサート以降、空いたブロックを活用するので積極的に

    Mysqlでinsert、delete、updateが遅い場合の対策 - Qiita
    shunpy
    shunpy 2017/04/15
  • RDBアンチパターン // Speaker Deck

    PHPカンファレンス2016の資料です http://phpcon.php.gr.jp/2016/

    RDBアンチパターン // Speaker Deck
    shunpy
    shunpy 2016/11/03
  • 非エンジニアのWebディレクターにオススメのGUIツール(Windows) MySQL/PostgreSQL編

    こんにちは、鴨田です。 大分久しぶりの投稿になりますが、今回はコマンドラインが苦手な非エンジニアのWebディレクターにオススメする、MySQLやPostgreSQLGUIツール「HeidiSQL」をご紹介いたします。 インストールの前に これから行う説明に関して、PuTTYなどで普段からリモートサーバーへ接続を行っている前提で、話が進んだりしますので、その点だけご注意をお願いします。ローカル環境であれば、特に気にしないで問題ありません。また、今回の説明はMySQLを用います。 インストール まずはHeidiSQLのサイトから、インストーラーをダウンロードします。 http://www.heidisql.com/download.php 「Installer」ボタンをクリックすると、最新版がダウンロードできます。32+64bit installerになっているので、OSのバージョンは気にし

    非エンジニアのWebディレクターにオススメのGUIツール(Windows) MySQL/PostgreSQL編
  • MySQLインデックスの基礎 その2 : 2つのクエリの違いとオプティマイザの判断 | Yakst

    MySQLのインデックスを効果的に使う方法の第2弾。よく似た2つのクエリなのに、実際にはインデックスの使い方がそれぞれ異なることを通じて、オプティマイザがどのようにクエリの実行計画を立案するのか、そしてその結果どうインデックスが使われるのかを解説する。 前の記事では、ひとつのテーブルに対する様々なクエリを対象にして、インデックスのデザイン方法について議論しました。この記事ではより実世界に即した問題解決の例として、よく似ているにも関わらず、ひとつは適したインデックスを使い、もうひとつはフルテーブルスキャンをしてしまうという、2つのクエリを取り上げます。動作の違いはバグなのでしょうか?それとも想定された動きなのでしょうか?続きを読んでみてください! 対象のクエリ2つ # Q1 mysql> explain select col1, col2 from t where ts >= '2015-0

    MySQLインデックスの基礎 その2 : 2つのクエリの違いとオプティマイザの判断 | Yakst
    shunpy
    shunpy 2015/07/24
  • MySQLテーブル設計入門

    2015/04/30 schoo WEB-campus https://schoo.jp/class/2218 Read less

    MySQLテーブル設計入門
  • MySQLインデックスの基礎 : ひとつのテーブルに対するクエリの最適化法 | Yakst

    MySQLのインデックスを効果的に使うにはどうしたらいいのかについての分かりやすい解説。そもそもインデックスの役割はとは何か、そしてどうすればその役割を果たしてくれるのかを説明する。 たとえ1つのテーブルだけに対して実行されるクエリでも、パフォーマンスが悪いというのはよくあることです。その理由は簡単で、インデックスの作り方がまずいため、実行計画がおかしくなってしまうのです。ここでは、1つのテーブルのみに対する色々なクエリを最適化するためのガイドラインを挙げてみたいと思います。 おことわり : あらゆる状況をカバーしようとはせず、一般的なガイドラインを提示するに留めるつもりです。ここで挙げたものがうまく適用できない例を簡単に見つけることができるのは間違いないでしょうが、ほとんどの場合はここに書いたことが十分なのも事実です。また、MySQL 5.6以上にあるIndex Condition Pu

    MySQLインデックスの基礎 : ひとつのテーブルに対するクエリの最適化法 | Yakst
    shunpy
    shunpy 2015/06/17
  • これからMySQLをイチから学ぶ人に捧げたい23個のコマンドリスト

    どーも。今年の春頃からMySQLを学び始めた、するぷ( @isloop )です。 学び初めのころは、「たかだか文字列を記録するだけでなんてかったるいんだ。やっぱりCSV保存に逃げようかな。」と思っていました。が、最近になってようやく慣れてきたようで、「結構便利じゃんMySQL」と思えるようになってきました。 というわけで今日は、学び初めの頃に欲しかった「とりあえずこれだけ覚えたらなんとかなるMySQLのコマンドリスト」というものを作ってみました。 これからMySQLをイチから学びたいという人が参考になればこれ幸い。

    これからMySQLをイチから学ぶ人に捧げたい23個のコマンドリスト
    shunpy
    shunpy 2015/05/09
  • 合肥便民家电维修服务网点

    日媒分析指出� �� ,岸田正考虑脱离以政府为主导�����、执政党影响力偏弱的政高党低决策��� ,转向政府同执政党紧密合作的政高党高目标���。点击进入专题�����:小浪早读湖南二人的遭遇引发舆论愤慨�����,不少民众表示支持她俩状告澳大利亚政府 ��。 查看更多

  • 他のPCからxamppをインストールしたPCのmysqlに接続する

    他のPCからODBC接続でxamppをインストールしたPCmysqlに接続を試みた際、Mysql Connecterのテスト接続でエラーが発生した。 エラー内容 —————————————————————- Host ‘xxx.xxx.xxx.xxx’ is not allowed to connect to this MySQL server —————————————————————- xamppの初期設定では、localhostからの接続だけが許可されているのでエラーになる。 他のPCから接続するには、接続の権限を持ったユーザー作る必要がある。 「mysql」という名前のデータベースに「user」という名前のテーブルがあるので、そこに新しいユーザーを加える。 書式 —————————————————————- GRANT ALL PRIVILEGES ON 有効範囲(データベース名

    他のPCからxamppをインストールしたPCのmysqlに接続する
  • MySQLで実行中のクエリ一覧を見て、SQLを強制終了する方法 | Basicinc Enjoy Hacking!

    時々、アプリケーションが暴走して変なクエリが発行されたり、いつまでたってもクエリが終わらない時とかありますよね。そんな時には、MySQLで実行中のSQLを見て、問題ありそうなものを強制終了させちゃいます。 MySQLにログイン $ mysql -u hoge -phoge db まずはMySQLにログイン。その後、 > show processlist; と打つと現在実行しているSQLの一覧が表示されます。項目の中にTimeというのがありますが、これが実行から何秒経過しているかを表しています。 ちなみに > show full processlist \G; と full を付け加えるとSQLの全文が表示される + \G を末尾に付け加えるとクエリ毎に分割されて見やすくなります。 明らかに時間がかかって負荷の原因になっているものがあれば Id という項目で表示されている数値を使って強制終了

    MySQLで実行中のクエリ一覧を見て、SQLを強制終了する方法 | Basicinc Enjoy Hacking!
    shunpy
    shunpy 2014/04/16
  • MySQLで処理に長時間かかっている複数クエリをまとめて殺す方法 | Basicinc Enjoy Hacking!

    あまりにも処理に時間がかかるようなSQLを実行してしまい、MySQLがうんともすんとも言わなくなってしまうような状況、よくありますよね。っていうか、まぁそんな状況あってはならないんですが、時たまあります。そんな時、問題となっているクエリの処理を止めたいわけです。 特定のクエリを止める方法 MySQLで実行中のクエリ一覧を見て、SQLを強制終了する方法 こちらを見てもらえればやり方は分かります。単純にMySQLに入って、show processlist;で問題のあるクエリを発見し、プロセスIDを kill するだけ。とても簡単。 複数のクエリを一括で止める方法 今回は問題のあるクエリが100個あったらどうする…?的なのを解決するエントリーです。まぁ、問題あるクエリ100個ある状況は、アプリ的に問題あるんじゃね?っていうレベルですが。 1個ずつプロセスIDをコピペして…なんてやってられないです

    MySQLで処理に長時間かかっている複数クエリをまとめて殺す方法 | Basicinc Enjoy Hacking!
    shunpy
    shunpy 2014/04/16
  • 【SQL】複数の条件のcountを1回のクエリでおこなう at softelメモ

    問題 こんなテーブル a があります。 create table a (id int, flag int); こんなふうにデータを入れて、 insert into a (id, flag) values (1, 1), (2, 1), (3, 0), (4, 0), (5, 1); こんなふうになっているとします。 select * from a; +----+------+ | id | flag | +----+------+ | 1 | 1 | | 2 | 1 | | 3 | 0 | | 4 | 0 | | 5 | 1 | +----+------+ なるべく単純な1つのSQLで、すべてのレコード数と、flag=1のレコード数と、flag=0のレコード数を取得せよ。 なお、サブクエリは使わないこと。 ヒント 集計を3つしたいので、こうなる? select count(????), c

    【SQL】複数の条件のcountを1回のクエリでおこなう at softelメモ
    shunpy
    shunpy 2014/03/17
  • MySQLではIN句とサブクエリの組み合わせはインデックスが効かない!?

    な、なんと person_diaryはインデックスが適用されずにフルスキャンされ(1行目のkeyがNULL) 逆にpersonはid列に設定してあるプライマリキーが適用される(2行目のkeyがPRIMARY) という二つの謎な現象が発生しました。 そもそもpersonはnameカラムに対してLIKE検索しているのに、id列のプライマリキーが効いちゃうのは全く納得いきません。なぜ、どうしてこんなことが起こるのでしょう? 原因 私がMySQLに期待していた動きとしては ①サブクエリを実行してperson.idのリストをメモリ中に作成 ②person.person_idに張られているインデックスを使って検索 というところでした。 期待通りに動いてくれなかったのには二つのMySQLの特性が関係していました。 特性① サブクエリを含むSQLは外側から先に実行される MySQLの場合、サブクエリを含む

    MySQLではIN句とサブクエリの組み合わせはインデックスが効かない!?
    shunpy
    shunpy 2014/02/04
  • データベースの基礎を理解しよう! プログラミング未経験から始めるPHP入門

    はじめに 連載では、PHPまたはプログラミング初心者の方を対象に、PHPを用いたWebアプリケーションの作成方法を説明していきます。今回は、データベースとSQLに関して、「おすすめレストラン一覧を閲覧できるWebサイトを制作する場合」を例にして、説明をしていきます。 対象読者 プログラミングが初めてでこれから学習する予定の方 プログラミングの経験はあるがPHPを初めて学習する方 この記事の内容 はじめに 対象読者 動作確認環境 データベースとは何か・・・データベースはどんな役割? データベース操作の基礎・・・データベース言語「SQL」とは SQL基礎:テーブルの作成・・・CREATE文を使ってみましょう SQL基礎:レコード追加・・・INSERT文を使ってみましょう SQL基礎:レコード検索・・・SELECT文を使ってみましょう SQL基礎:レコード更新・・・UPDATE文を使ってみまし

    データベースの基礎を理解しよう! プログラミング未経験から始めるPHP入門
    shunpy
    shunpy 2013/07/01
  • layer8.sh

    This domain may be for sale!

    shunpy
    shunpy 2013/03/19
  • 1