タグ

MySQLに関するAobaのブックマーク (36)

  • 論理削除と一意性制約を両立させる方法・DB製品別 - Qiita

    アプリケーション上でなにかエントリ(例えば記事だとかユーザだとか)を削除したとき、DB上の行は削除せず単に【削除済み】フラグを立てるだけという扱い方を 論理削除 と呼びます。 論理削除にはいろいろなメリットがあります。行削除のように関連する他テーブルへ削除が波及しないこと、エントリ復活ができること、障害時にデータ変更の経緯を追いやすくなることなどなど(デメリットもわんさかあるんですが、この記事の主旨からははずれるので別途お調べください)。 ところが論理削除の方針でDBを組んでいて困ったことはありませんか? 「 メールアドレスは一意性(UNIQUE)制約をかけたいのに、それだと削除済みのユーザと同じメールアドレスが使えないことになる 」 論理削除と一意性制約、両立はできないのか? できないと思っている方、多いと思います。実はちゃんとできます。DB製品によって実現方法がちょっと違ってくるだけで

    論理削除と一意性制約を両立させる方法・DB製品別 - Qiita
    Aoba
    Aoba 2016/04/29
    論理削除とUNIQUE制約を両立させる
  • InnoDB のフルテキストインデックスで日本語 NGRAM - Qiita

    「使い物になんねぇ」って印象でしたが、ちょっと試してみると簡単なキーワード検索程度なら十分実用的な気がします。 試行錯誤の結果を記します。 ※ この文章は実験しつつ記述しています。整合性や内容の保証はできません ※ この文章はセキュリティ的なことを一切意識していません ※ 「5.6 からフルテキストインデックスが InnoDB でも使えるようになった」だけであり、基的な仕様・動作は特に変わっていないはずです。設定項目名が変わっている(ft_min_word_len → innodb_ft_min_token_size 等)ようですがここでは触れません 事前作業 CREATE TABLE `article` ( `seq` INT(11) NOT NULL AUTO_INCREMENT COMMENT '連番', `title` VARCHAR(64) NULL DEFAULT NULL

    InnoDB のフルテキストインデックスで日本語 NGRAM - Qiita
  • 誰も教えてくれなかったMySQLの障害解析方法 - Qiita

    それほどDBに詳しくないアプリエンジニアが何かトラブった時にすぐさま行動して問題把握できるようになる情報を列挙しておきます。 開発時、障害時の対処療法やちょっとした定期監視方法などを対象にしています。 抜的な対策などはインフラエンジニアさんにお任せしたほうがいいと思います。 DBはいろんな意味でこわいんでできれば触りたくないです>< 事前確認 MySQLサーバーのシステム設定値を確認しておく 以下のようにサーバーのシステム設定値を確認できます。 mysql> SHOW GLOBAL VARIABLES; # ワイルドカード(%)を用いた絞り込み mysql> SHOW GLOBAL VARIABLES LIKE 'performance_schema%'

    誰も教えてくれなかったMySQLの障害解析方法 - Qiita
    Aoba
    Aoba 2015/06/02
  • 【MySQL】GROUP_CONCAT()を使ってみる at softelメモ

    以下のようなテーブルがあるとします。 Aテーブル Bテーブル 以下のようなSQLを流すと、 SELECT A.id, GROUP_CONCAT(B.bname) as namae FROM A, B WHERE A.id = B.aid GROUP BY A.id こんな風に、まとめてくれました。 そのほか、以下のようなこともできます。 昇順・降順に並べてくれる GROUP_CONCAT(B.bname order by B.id) 重複する名前をまとめてくれる GROUP_CONCAT(distinct(B.bname)) 区切り文字指定もできる GROUP_CONCAT(B.bname separator '/') 参考 ・ MySQLの独自の関数なので、他のデータベースを使う場合は要検討(Oracleだとwmsys.wm_concatがあるなど)。 ・ NULLを含む場合注意。 この

    Aoba
    Aoba 2014/05/13
    GROUP_CONCATの長さ制限は初期値で1024バイト。それを超えるとバッサリ切り落とされるので要注意。超えそうな場合は事前にset sessionしましょう
  • MySQL :: MySQL 5.6 リファレンスマニュアル :: 9.3 予約語

    SELECT、DELETE、または BIGINT などの特定の語は、テーブル名やカラム名などの識別子として使用するために予約されており、特別な取り扱いが必要になります。これは、組み込み関数の名前にも当てはまる場合があります。 セクション9.2「スキーマオブジェクト名」で説明しているように、予約語は、引用符で囲まれている場合、識別子として許可されます。 mysql> CREATE TABLE interval (begin INT, end INT); ERROR 1064 (42000): You have an error in your SQL syntax ... near 'interval (begin INT, end INT)' mysql> CREATE TABLE `interval` (begin INT, end INT); Query OK, 0 rows affe

  • なければ INSERT、あれば UPDATE

    間違って主キーと同じ値を含む行を挿入しようとしたらエラーを出して教えてほしいとき INSERT INTO test VALUES(1,100); とすると、ERROR 1062 (23000): Duplicate entry '1' for key 1 というエラーが出る。 間違って主キーと同じ値を含む行を挿入しようとしても無視して処理を続行してほしいとき INSERT IGNORE INTO test VALUES(1,100); とすると、Query OK, 0 rows affected (0.00 sec) と表示される。テーブルは変更されていない。 主キーと同じ値を含む行がないなら新しく挿入し、あるならその行を更新してほしいとき REPLACE INTO test VALUES(1,500); とすると、Query OK, 2 rows affected (0.00 sec)

    Aoba
    Aoba 2012/06/29
    知らなかった…
  • Google Cloud SQL - Google Code

    Already signed up for Google Cloud SQL? Create an instance. Get started writing Java or Python applications in Google App Engine. Perform some basic tasks for your instance. What is Google Cloud SQL? Google Cloud SQL is web service that allows you to create, configure, and use relational databases with your App Engine applications. It is a fully-managed service that maintains, manages, and adminis

  • Using filesort

    去年ソートに関する記事を書いたが、今日はその続きである。 MySQLでEXPLAIN SELECT...を実行するとExtraフィールドでよく見かける「Using filesort」という文字列。Filesortって一体なんだろう?と思ったことはないだろうか。単刀直入に言ってFilesortの正体はクイックソートである。 クエリにORDER BYが含まれる場合、MySQLはある程度の大きさまでは全てメモリ内でクイックソートを処理する。ある程度の大きさとはsort_buffer_sizeであり、これはセッションごとに変更可能である。ソートに必要なメモリがsort_buffer_sizeより大きくなると、テンポラリファイル(テンポラリテーブルではない)が作成され、メモリとファイルを併用してクイックソートが実行される。 Filesortは全てのソート処理において実行されるわけではない。前回の記事

    Using filesort
    Aoba
    Aoba 2011/01/06
    SORTされる件数をいかに減らすか、という点がキモ/SubqueryをFrom句で使ったりするのも、やりようによっては悪ではない
  • AmazonRDSでslow queryを出力するようにする方法

    AmazonRDSは、デフォルトの設定ではslow queryを出力するようになっていない。 また、MySQLが動いているサーバにアクセスすることができないので、slow queryをログファイルに出力したとしてもそれを閲覧する術がない。 RDSでも採用されているMySQL 5.1からは、slow queryをテーブルに保存できるようになったので、それを使う。 方針 ログはテーブル(mysql.slow_log)に出力する。 実行に1秒以上かかったクエリを記録する 100行以上を読み込んだクエリを記録する 普通なら以下のオプションをmy.cnfに設定すればOK。 [mysqld] slow_query_log = ON long_query_time = 1.000 log_output = TABLE min_examined_row_limit=100 RDSの場合は、db-param

    Aoba
    Aoba 2010/11/01
    slow queryをテーブルに書き出す
  • Net_HandlerSocket - Openpear

    Net_HandlerSocket Subversion Repository: http://openpear.org/repository/Net_HandlerSocket / Latest Release: 0.0.1-alpha HandlerSocket Plugin for MySQLPHPクライアントです。 http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL

  • GitHub - ahiguti/HandlerSocket-Plugin-for-MySQL: NOTE: THIS REPO IS JUST A COPY. The upstream repo of HandlerSocket has been moved to https://github.com/DeNA/HandlerSocket-Plugin-for-MySQL .

    ----------------------------------------------------------------------------- HandlerSocket plugin for MySQL Copyright (c) 2010 DeNA Co.,Ltd. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditio

    GitHub - ahiguti/HandlerSocket-Plugin-for-MySQL: NOTE: THIS REPO IS JUST A COPY. The upstream repo of HandlerSocket has been moved to https://github.com/DeNA/HandlerSocket-Plugin-for-MySQL .
  • Tutorial_ja - skyload - Google Code

    Code Archive Skip to content Google About Google Privacy Terms

  • Not Only NoSQL!! 驚異的なまでにWRITE性能をスケールさせるSPIDERストレージエンジン

    Webサービスでは、世界中からのトラフィックを捌く必要があるため、いくらチューニングしようとも一台のRDBMSでは捌ききることが出来ないのが常だ。MySQLは最初からマスター・スレーブ型のレプリケーション機能が搭載されており、スレーブをたくさんぶら下げることによって参照の負荷をスレーブに割り振るというスケールアウトによってその問題に対処してきた。スレーブによるスケールアウトは、参照(=PV)が多いWebサイトと非常に相性が良く、幾多のWebサイトにおいて実績を作ってきているし、まだまだ利用されている。 しかしながら、サイトのトラフィックが劇的に増加してくるようになると、レプリケーションによる負荷分散では追いつかなくなってきた。そこで人々がとった選択肢は、memcachedを利用することである。memcachedはインメモリ型の高速なKVSであり、参照・更新性能はMySQLより格段に高い。M

    Not Only NoSQL!! 驚異的なまでにWRITE性能をスケールさせるSPIDERストレージエンジン
  • MySQLバックアップ頂上決戦!! LVMスナップショット vs InnoDB Hot Backup

    スナップショットを使えばとある瞬間のディスクやファイルシステムのデータをいつでも後から参照することができる。しかもスナップショットの作成は一瞬だ。スナップショット機能を活用すれば最強のオンラインバックアップソリューションが出来るだろう。 しかし、スナップショットでバックアップを取るなんて危険な操作じゃないのか?!と不安に思われる方もいらっしゃるかも知れない。MySQL Serverが稼働中にいきなりデータだけをとってくるのだから、そのような疑問を持たれるのは頷ける。しかし仕組みさえ分かればスナップショットによるバックアップは怖くないということが分かるはずだ。そこで、まずはスナップショットによるバックアップの仕組みについて説明する。スナップショットを取る際の要件は次の通りである。 全てのデータを単一のボリュームに置くこと。つまり、一回のスナップショット操作でバックアップが取れることだ。 ディ

    MySQLバックアップ頂上決戦!! LVMスナップショット vs InnoDB Hot Backup
    Aoba
    Aoba 2010/09/28
  • 大人のためのInnoDBテーブルとの正しい付き合い方。

    InnoDB関連でよくある質問のひとつに「テーブルのメンテナンスは何をすればいいんですか?」というものがある。InnoDBMySQL 5.5でデフォルトストレージエンジンとなるため、InnoDBのテーブルメンテナンス計画を立ようと思う機会も増えることだろう。そこで、今日はInnoDBのテーブルメンテナンスの各種方法となぜそうしなければいけないかという理由を解説しようと思う。 ANALYZE TABLEテーブルメンテナンスの代名詞といえば、インデックス統計情報の更新ではなかろうか。運用を続けるうちに、知らず知らずインデックス統計情報が狂ってしまい、思うような性能が出ない。RDBMSにはそのような問題がつきものであるが、InnoDBの場合、ANALYZE TABLEは不要である。なぜなら、InnoDBが自発的に統計情報を更新するからだ。InnoDBは以下の条件に適合すると、ANALYZE T

    大人のためのInnoDBテーブルとの正しい付き合い方。
    Aoba
    Aoba 2010/09/28
    InnoDB
  • [MySQL][VP]Vertical Partitioningストレージエンジン 0.1リリース

    Vertical Partitioningストレージエンジンというストレージエンジンをリリースしました。 http://launchpad.net/vpformysql このストレージエンジンは、1対1の関係にある複数のテーブルを同一のテーブルのように扱うことを可能にするものです。 これは、1対1の関係にある複数のテーブルをjoinしたviewに似ていますが、MySQLのviewとは以下の点が異なります。 ・insertできる。 ・パーティションの刈り込みが起こる。(関係のないパーティションは利用しない) Vertical Partitioningストレージエンジンは以下のような用途で利用できます。 (Vertical Partitioningテーブルを親テーブル、統合されるテーブルを子テーブルと呼びます) 1.レコードサイズの大きいInnoDBテーブルのテーブルスキャンは、レコードが増え

    Aoba
    Aoba 2009/08/20
  • ウノウラボ Unoh Labs: 国産MySQLストレージエンジン「Spider」の作者、斯波健徳氏に聞く

    こんにちは。中村です。 MySQLにはMyISAM、InnoDBCSVなどのいくつかストレージエンジンがありますが、皆さんはSpiderというストレージエンジンを聞いたことはありますでしょうか。Spider Storage Engineは斯波健徳さんにより作成されたDatabase Shardingを可能にするストレージエンジンでMySQL 5.1で利用可能です。 先日、某集まりで斯波さんとお会いしたときにSpiderを作っているということを教えてもらったので、早速詳しい内容を教えてもらうことにしました。 ※Spiderについての説明資料はMySQLカンファレンス 2009にて斯波さんが発表されたときのスライドがあります。スライドの直リンク(zip) Spider Storage Engine について posted by (C)フォト蔵 Spider Storage Engineとは?

  • 小野マトペの業務日誌(アニメ制作してない篇) - MySQLで50個のIDからレコードを取得したいときに、プレースホルダで50回叩くのとINで一回で取るの、どっちが速いか。

    今日はふぁぼったーのフロントエンドDB処理まわりをリファクタリングしました。この辺りも、もう1年半も開発・拡張を続けている部分なのでかなり汚くなっており、今後のためにできるだけソースを短くし、保守性の高いコードに書き直すなどの作業です。 そのなかで、以前から気になっていた点があったので、せっかくなので検証してみました。 前提 ふぁぼったーでは、発言をデータベースから取得する際、最初に発言とそのユーザーをSTATUSテーブルとUSERテーブルからSELECTして、そこで得た発言のIDを用いて、右下に出る各発言のふぁぼりユーザーをFAVORITEテーブルとUSERテーブルから別途SELECTしています。二つに分けたのはその方が速かったからですが、今回検証したのは、後半のふぁぼりユーザー取得部分の書き方です。 FAVORITEテーブルから複数の既知のステータスIDのレコードをSELECTしてき

    小野マトペの業務日誌(アニメ制作してない篇) - MySQLで50個のIDからレコードを取得したいときに、プレースホルダで50回叩くのとINで一回で取るの、どっちが速いか。
  • MySQL AB :: Managing Hierarchical Data in MySQL

    "The Documents contained within this site may include statements about Oracle's product development plans. Many factors can materially affect Oracle's product development plans and the nature and timing of future product releases. Accordingly, this Information is provided to you solely for information only, is not a commitment to deliver any material, code, or functionality, and should not be reli

    Aoba
    Aoba 2009/01/18
    RDBでツリー/Nested Set Model
  • © Copyright 2008 Oki Electric Industry Co., Ltd. MySQLへの地理空間距離関数の追加 distance_sphere()の移植とGPL公開 奥村幸治@沖電気工業㈱ -- 11 -- © Copyright 2008 Oki Electric Industry Co., Ltd. 位置表現抽出・管��

    © Copyright 2008 Oki Electric Industry Co., Ltd. MySQLへの地理空間距離関数の追加 distance_sphere()の移植とGPL公開 奥村幸治@沖電気工業㈱ -- 11 -- © Copyright 2008 Oki Electric Industry Co., Ltd. 位置表現抽出・管理サービス LocoSticker とは 位置(緯度経度)をキーにコンテンツ検索を可能に 周辺地域もまとめて検索可能 異表記(住所とスポット名、別名)もまとめて検索可能 複数地点で存在する地名を区別して検索可能 位置情報で検索位置情報で検索キーワードで検索キーワードで検索 位 置 表 現 抽 出 エ ン ジ ン N34.25, E135.32 N35.75, E134.38 N36.11, E132.43 N35.54, E133.44 秋芳洞

    Aoba
    Aoba 2009/01/11
    球面上の距離計算処理の移植話など