mysql

CentOS 5.2 MySQL 5.1.44にQ4Mを入れる

Q4Mはサイボウズラボの奥 一穂氏が開発した、MySQLのストレージエンジンとして使用できるメッセージキューです。詳細については以下のウノウラボさんの記事が参考になりますので、こちらをご覧ください。 Q4Mを触ってみる インストールの前提条件として、MyS…

CentOS 5.2 MySQL 5.1.44にSpider +VPを入れる

漢のコンピューター道さんのまるで魔法のようなストレージエンジン??VP for MySQLによる驚愕のテーブル操作テクニック。のエントリーを参考に、VPも一緒に入れてみる。 VP公式ホームページ

CentOS 5.2 MySQL 5.1.44にSpiderを入れる

Spiderストレージエンジンについては以下のブログの方を参照して頂くとして、Spiderの最新版を入れてみます。 国産MySQLストレージエンジン「Spider」の作者、斯波健徳氏に聞く 快適スケールアウト生活への第一歩。SPIDERストレージエンジンを使ってみよう!…

CentOS 5.2でMySQL 5.1.49をソースからインストール

wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.49.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/ tar xvzf mysql-5.1.49.tar.gz cd mysql-5.1.49 autoconf ここでエラーが発生、autoconfのバージョンが足りませんかそうですか aclocal.m4…

CentOS 5.2でMySQL 5.1を最新レポジトリのソースから入れてみる

こちらの書籍を参考にP489を参考にまずはレポジトリ管理ソフト bazaarを入れる。併せてこちらも読んでおく開発ソースツリーからのインストール mysql 5.1の最新レポジトリをダウンロード cd /usr/local/src mkdir mysql-server bzr init-repo --trees mysql-…

MySQLでありがちなこと その1 ORDER BY RAND()

ガチャやルーレットで、ランダムにアイテムを選択...という時に以下のようなSQLでクールに一発で決めるぜ!!としてしまいがちなのですが、大規模サービスでこれをやるとちょっとヤバイです。 SELECT * FROM gacha ORDER BY RAND() LIMIT 1 自分もMySQLのマ…

MySQL InnoDBだけで全文検索 を試してみる

sh2さんの人気エントリーMySQL InnoDBだけで全文検索で実運用環境で導入を検討したときのメモなどを紹介します。上記記事と合わせて何かの参考になれば幸いです。 sh2さんの記事では実験エントリーなので、インデックス作成用のトリガーを設定してから初期デ…

DBセッションでのデバックに使う関数や設定変数アレコレ まとめ

まず最初に紹介するのがコレ、現在のDBのセッションに割り当てられた接続IDを取得するCONNECTION_ID()関数。一意なテンポラリーテーブル名に使われたりします。使い方としてはアプリケーション側で、作成した筈のテンポラリーテーブルやユーザ変数にアクセス…

PHP 5.3でMySQL Native Driverを使用する方法

PHP 5.3でMySQL Native Driverに対応となったのですが、configureで指定しないと有効にならないので以下メモ ./configure \ --with-mysql=/usr/local/mysql \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --with-pdo-mysql=/usr/local/mysql ./confi…

MySQLでマテリアライズドビュー10 実装編 定期更新(cron編)

MySQLのイベントスケジューラーがいつも使えるとは限らないので、cronでの定期更新の方法を記載しておきます。イベントスケジューラーより簡単ですね。 アクセス集計マテリアライズ化 # 毎日0時に実行 0 0 * * * /bin/sh echo "call access_daily_materializ…

MySQLでマテリアライズドビュー9 実装編 参照更新(on demand)

Oracleのマテリアライズドビューのパターンにない方法として、SELECT文実行前にマテリアライズドビューを更新するという方法がある。このパターンはon demandの一種でマテリアライズド・ビューの更新が滞っていると、参照までに時間が掛かるという弱点はある…

MySQLでSELECTトリガー

MySQLではINSERT、UPDATE、 DELETEとトリガーが実装されていますが、SELECTのトリガーは実装されていません。というかSELECTトリガーってなんだよっ!Oracleあたりにはありそうですが、RDBMSでSELECTトリガーなんて言うものは僕も聞いたことありません。そも…

MySQLでマテリアライズドビュー8 集計クエリー実装編 定期更新(start with句・next句)

昨日の集計を行うように修正 DROP PROCEDURE access_daily_materialized_insert; delimiter // CREATE PROCEDURE access_daily_materialized_insert() begin replace into mv_access_daily (access_date,access_daily_num) select date_sub( curdate() , INT…

MySQLでマテリアライズドビュー7 集計クエリー実装編 手動更新(on demand)

トリガーを除去 DROP TRIGGER IF EXISTS `access_daily_materialized_insert` 本日分の集計を更新するreplace文を書く*1 REPLACE INTO mv_access_daily (access_date,access_daily_num) SELECT CURDATE() , count(access_id) FROM access WHERE CURDATE()=DA…

MySQLでマテリアライズドビュー6 集計クエリー実装編 即時反映(on commit)

集計クエリーでのマテリアライズド・ビューは実装が異なって来るので今回はこちらを実装してみましょう。例として非常にシンプルなアクセスログ集計を考えます。

MySQLでマテリアライズドビュー5 実装編 定期更新(start with句・next句)

前回のエントリーで作成した、ストアドプロシージャをMySQLのイベントスケジューラーに登録して実行してみます。 1時間に1回実行する CREATE EVENT e_comment_materialized_insert_hourly ON SCHEDULE EVERY 1 HOUR COMMENT 'updated materialized view each…

MySQLでマテリアライズドビュー4 実装編 手動更新(on demand)

さて、前回のMySQLでマテリアライズドビュー3 on commitのエントリーにてマテリアライズド・ビューの一般的な形は紹介しました。先の例は高速化という意味では成功でした。ですが、世の中何事も等価交換(トレードオフ)です。参照の高速化の見返りとして、デ…

MySQL TIPS 6 ストアドプロシージャで指定した数のダミーデータを用意する3

ユーザ変数の文字列バッファ操作に時間が掛かっているので、一旦テンポラリーテーブルに格納してからgroup_concatでまとめて結合という手段を取ってみた。phpで言うところの配列(array)に格納しておいて、あとでimplodeでまとめて結合するというテクニックで…

MySQL TIPS 5 ストアドプロシージャで指定した数のダミーデータを用意する2 (失敗編)

以前のエントリーで作ったinsert_generate_seriesを複数INSERT,複数カラムで生成データを使用可能にしてみる

サブクエリーにLIMITを使った履歴系テーブルの高速化(MySQLでマテリアライズドビュー3 番外編)

履歴系テーブルは基本的にページャーでページ分割することがほとんどだと思います。前回のエントリーでもLIMIT句を使って30行だけ取ってきている例となっています。今回の問題点は、巨大なテーブル×巨大なテーブルのJOINをしようとするから重いのであって、…

MySQLでマテリアライズドビュー3 実装編 即時反映(on commit)

まずは簡単な履歴系のテーブルから実体化してみましょう例としてユーザのテーブルと紐づいているコメント機能を提示します。

今さらですが本BLOGを見ていただくより先に見ていただきたい方々のサイトを紹介致します。

MySQLの著名な方々にブックマークされてしまって戦々恐々としております名無しのIT系です。 今さらですが本BLOGを見ていただくより先に見ていただきたい方々のサイトを紹介致します。 sh2さんのSH2の日記 sakaikさんのsakaikの日々雑感〜(T)編 言わずと知れ…

MySQLでマテリアライズドビュー2

さてMySQLでOracleのマテリアライズドビューを再現するにあたり、マテリアライズドビューのモードによってそれぞれ再現方法が異なります。元となるクエリーが、集計クエリーなのか、複合クエリーなのか等によって、それぞれ内容が変わってきてしまいますが、…

MySQLでマテリアライズドビュー1

Oracleではマテリアライズドビューというビューを実体化させる機能があります。MySQLのビューにはマテリアライズドビューはありませんが、サマリーテーブルと(トリガー、イベントスケジューラー等)を組み合わせることによって同様な機能を実現可能です。この…

裏MySQLクエリー入門(26) 基礎編15 ダーティーリード

場面によっては、参照整合性が必要ない場合がある。その場面が、長時間のロックを要する場合、ダーティーリードにモードを切り替えることによってパフォーマンスを向上させることができることがある。要するにKVSと同じように参照整合性を犠牲にすることによ…

MySQL TIPS 4 ストアドプロシージャで指定した数のダミーデータを用意する

MySQLでブログを書いていてパフォーマンス系の記事を書こと思った時にダミーデータの用意をするのが面倒です。generate_series*1があれば簡単なのですがMySQLにはないのでストアドプロシージャで汎用的にダミーデータを生成できるものを作ってみました。以後…

裏MySQLクエリー入門(25) 基礎編14 俺々インデックスの作り方(関数インデックス)

MySQLでは、関数インデックスが使えません。そこで擬似的に関数(式)インデックスを作ってみることにしましょう。ユーザテーブルでメールアドレスを小文字にした時の関数インデックスを作る場合を例としてみます。メールアドレスをユニークにしたものの、大文…

裏MySQL クエリー入門 (24) 基礎編13 GROUP BY

今更GROUP BY?というのはごもっともな話です。普通のGROUP BYはマニュアルを見ていただくとして、ここでは裏MySQL クエリー入門的なGROUP BYのサンプル例をいくつか紹介していきましょう。 日毎に集計するには SELECT DATE(access_time), count(access_id) …

MySQL TIPS 3 空間情報(geometry)を使って経度・緯度の検索を高速化する

以下のようなピタゴラスの定理を使った指定した経度緯度に最も近いデータを取得するSQLは結構ありがちですが、CPU負荷が高く効率も悪いのでMySQLに標準搭載となった空間情報(geometry)を使ってみることにします。 SELECT * FROM loc ORDER BY power(abs(lati…

MySQL TIPS 2 1レコードのデータ内容で別のレコードを更新

今回はクライアントから、そんなの簡単じゃないの?という程度に依頼されるが、実は結構めんどうな うっとぉしい依頼の解決方法ついて解説します。 UPDATE event e1,event e2 SET e1.event_name=e2.event_name, e1.event_flg=e2.event_flg WHERE e1.event_id…