SAVEPOINT、ROLLBACK TO SAVEPOINT および RELEASE SAVEPOINT ステートメント
SAVEPOINT、ROLLBACK TO SAVEPOINT および RELEASE SAVEPOINT ステートメント
MySQLのSQL文を、OSのコマンドラインまたはシェルスクリプトから実行したい時の例を、いくつか。 まずコマンドラインからサクッと実行するには、-eオプションを利用。 $ mysql -u user_name -pxxxxxx -e “SQL文” 「;」で区切れば複数のSQL文発行も可能。 $ mysql -u user_name -pxxxxxx -e “SQL文;SQL文;SQL文” 以下の方式でも可。 $ echo “SQL文;” | mysql -u user_name -pxxxxxx これらのコマンドラインをそのままシェルスクリプトに書いてもいいわけだ。 次にSQL文をファイルに記述しておいて読み込ませる方法。 “file_name”にはSQL文が記述されているものとする。 $ mysql -u user_name -pxxxxxx < file_name 上記はSQL文にお
2008年10月15日 15:13 カテゴリMySQL [MySQL]ORDER BY RAND()について Posted by kistame228 No Comments No Trackbacks Tweet MySQLのORDER BY RANDはランダムに値を取得してくれる 便利なのだけど、RANDを利用すると全文走査するので 大きなテーブルだと非常に重くなってしまう。 で、見つけたのが以下のAntonさんのブログ ◆“Do not use ORDER BY RAND()” or “How to get random rows from table?” ↑をザックリ訳してみると ・RANDは使うな ・じゃぁどうするのか 1-1.SELECT COUNT(*) AS cnt FROM quotes で全件数を取得 1-2.1-1で取得した数値からランダムな値をプログラムで生成 1-
仕事でMySQLのパフォーマンスチューニングをしていて、インデックスについて分かっていないことが多かったので調べたことをメモ。基本的なところから学習しなおした。 MySQLのインデックスは、カラムが特定の値をもつレコードの迅速な検索に使用される。インデックスを使用すれば、数百とか数億ものレコードが入っているテーブルから、一組のレコードを迅速に見つけて取り出すことが可能になる。 しかし、インデックスは速度を改善することもあるが、挿入の邪魔になって遅くなることもある。 インデックスを適切に使うために、まずはインデックスの基本概念をおさえる必要がある。 インデックスの概念 インデックスとは インデックスの仕組みを理解するには、まずMySQLがどのようにクエリに応答するかを知る必要がある。 例えば、 SELECT * FROM phone_book WHERE last_name = 'Hoge'
出ました。今回は機能追加が1件、バグ修正が55件あります。バグ修正のうちセキュリティに関するものが1件、パーティショニングに関するものが5件、レプリケーションに関するものが7件となっています。 MySQL 5.1.38から本体に付属するようになったInnoDB Pluginですが、バージョンが1.0.7に上がりRCからGA(Generally Available、正式版)となりました。ついに正式リリースです。というわけで何度か繰り返している話題ですが、今回はInnoDB Pluginについて再度おさらいをしておきたいと思います。 InnoDB Pluginの使い方 MySQL 5.1.38以降であればInnoDB Pluginを使うように設定するのは簡単です。/etc/my.cnfに以下の設定を書き加えることでInnoDB Pluginが有効化されます。 ignore-builtin-in
どこまで出来るか?!やれるところまでやってやるぜ!!と、威勢が良いのは若い間だけの話。オトナのオトコは、攻めるときはとことん攻めるが自らの限界もわきまえて賢く振る舞うのがスマートってものである。というわけで、今日はMySQLのいろいろな限界についてまとめてみる。皆さんも是非MySQLの限界を知り、MySQLをもっとスマートに使って頂きたい。 SQL文の最大長 MySQLサーバーが実行出来るSQL文の最大長は、max_allowed_packetシステム変数で表される。max_allowed_packetの最大値は1GBである。max_allowed_packetの値はセッションごとにも設定可能なので、デフォルトではそこそこの値(16MBなど)に設定しておいて、必要に応じて大きな対を使うと良いだろう。 データベースの個数 データベースオブジェクトの個数に制限はない。データベースオブジェクトは
この列の中でチューニングに大切な項目が、type、key、rows、Extra である。基本的な対策は、処理する行数を減らし、全体の処理回数を減少させることである。具体的な目標としては、行数の概算見積りである rows列の値をできるだけ少なくすることである。ちなみに以下は、テスト環境ならびにテーブル名、カラム名などは修正を加えたものであり本番環境のものではない。(実際のクエリチューニングは本番環境でやっているが、以下のデータは本エントリーのために別途テストデータなどを用意した結果である) typeが「ALL」というのは、テーブルスキャンしているということ。インデックスがまったく利用されていないので、要チューニングである。よってまずは where句の ar_saiyo_flg にインデックスを貼る。(こんな基本的なこともやっていないのか?と叱られそうだが、自分で作ったものじゃないシステムを運
はじめに この記事では、MySQL を使って簡単なメッセージキューを手軽に実装する方法を解説します。 メッセージキューとは、メッセージを一時的に溜めておき、順次処理するための仕組みです。迅速なレスポンスが必要な Web アプリケーションにおいて、時間のかかる処理を非同期に行うために、バックグラウンドで順次処理していくような場合に利用できます。 簡単なメッセージキューと言っても、大規模な運用にも耐えられる程度の速度と堅牢性を持ちます。 また、ここで解説している方法で作られたメッセージキューは、弊社ウェブサービスであるニコニコ動画に最近追加されたtwitter連携機能でも利用しています。 メッセージキューを作るにあたって 今回実装するメッセージキューは メッセージの追加(push)を高速に行う事ができる メッセージの取得(pop)はある程度高速に行う事ができる 多くのクライアントから同時に p
テーブル定義を変更したい。インデックスが壊れてしまったので再作成したい。そんな場合はALTER TABLEを使う。ALTER TABLEはテーブル定義を変更するお馴染みのコマンドであるが、その挙動は意外と知られていない。(エキスパートとおぼしき方々からも度々質問を受ける。)そんなわけで、今日はALTER TABLEについて解説しようと思う。 まず結論から言うと、なんとMySQLのALTER TABLEはテーブルのデータを全てコピーし直すのである。なんて無駄なことを!?と思うかも知れないが、テーブル定義(スキーマ)の変更を動的に行うには、ストレージエンジンによるサポートが必要であり、動的なスキーマ変更をサポートしているストレージエンジンはまだ少ないのである。(動的スキーマ変更をサポートしているのはMySQL Clusterぐらいだ。しかも追加だけ。)デフォルトで利用出来るMyISAMはInn
ちょっと遅めの夏休みをもらって八丈島に行ってきました nakamura です!いい所すぎて危うくそのまま移住するところでした。 データベースの移行をする際みなさんどんな流れで作業しているでしょうか。コマンドラインでダンプを取って、サイズが大きかったら gzip で圧縮して、WinSCP でそれをローカルに落としてきて、それをまた別のサーバにアップロードして・・・・なんて事してたりしませんか? シェルのパイプやリダイレクトをうまく使ってあげれば、この辺りはコマンド一発でいけちゃったりするのです。今日はそんなコマンド例のご紹介です。 実際によく使うコマンドの例を箇条書きで。 とりあえずダンプの結果をそのまま圧縮する。 mysqldump -udb_user db_name -pdb_pass | gzip > db_name.dump.sql.gz 特定の文字列を置換した上で圧縮する。 MT
SitePoint: New Articles, Fresh Thinking for Web Developers and Designers PHPを使ってWebサイトやWebアプリケーションを構築する場合はデータベースも併用することが多い。そしてその場合に採用されることが多いデータベースのひとつにMySQLがある。PHPはすぐに利用できるようになるプログラミング言語といわれているが、MySQLやSQLはそうではない。堅牢で信頼できるデータベースを設計し、それを扱うSQLクエリを作成するにはそれなりの学習時間と経験が必要だ。 こうした話題がSitePointにおいてTop 10 MySQL Mistakes Made By PHP Developersとして掲載されている。PHPデベロッパが犯しがちな10のMySQLミステイクという内容になっている。どういった間違いをしてしまうか簡単に
WindowsアプリのツリービューっぽいUIをWEB上で簡単実装できるjQueryプラ... 次の記事 ≫:シンプルさがいい感じの154種類のアイコンセット Top 10 MySQL Mistakes Made by PHP Developers PHP開発者のMySQLの間違いトップ10。 手慣れている人にとっては知ってることも多いかもしれませんが、初心者が役立ったり、知らない部分のカバーとしてメモとして書いてみます MyISAMを使っている デフォルトはストレージエンジンにMyISAMだけどInnoDBを使おう リカバリ可能でオンラインバックアップ機能、外部キー利用可能なInnoDBおすすめ 詳細:Open database life: MyISAMとInnoDBのどちらを使うべきか PHPのMySQL関数を使っている mysql_* 関数を使わず、PDO等でストレージ変更に対応しよう
ちょっとキャッチ−なタイトルをつけてしまったが、今日は独断と偏見でMySQLを高速化する方法を10個紹介しよう。MySQLサーバをチューニングするときや初期導入する場合などに参考にしてもらいたい。 1. バッファを増やす、または減らす チューニングの基本中の基本であるが、適切なバッファサイズを設定することはパフォーマンスチューニングの要である。主なバッファは次の通り。 innodb_buffer_pool_size・・・InnoDBだけを利用する場合は空きメモリの7〜8割程度を割り当てる最も重要なバッファである。余談だが、実際にはここで割り当てた値の5〜10%ぐらいを多めにメモリを使うので注意が必要だ。 key_buffer_size・・・MyISAMだけを利用する場合は、空きメモリの3割程度を割り当てるといい。残りはファイルシステムのキャッシュ用に残しておこう。 sort_buffer_
MySQLのSELECT文で使用できる構文について説明します。 なお、基本程度の構文については説明していません(DISTINCTなど)。 table references FROM句で指定するテーブル名に、いくつかのオプションを付ける事が出来ます。 AS テーブルに別名を付けます。なお、ASは省略できます。 SELECT T1.name FROM table_a T1; USE INDEX Select時に使用するインデックスを指定します。 SELECT * FROM table_a USE INDEX (use_index_name); IGNORE INDEX Select時に使用しないインデックスを指定します。 SELECT * FROM table_a IGNORE INDEX (ignore_index_name); FORCE INDEX USE INDEX と似たような動作を
よく,データベースの運用に関する相談の中では,バックアップと可用性(アベイラビリティ)を混同してい場合がある。データベースは,ある瞬間のデータを保存することが目的である。障害が発生した際に保存したデータを再現することにより,復元をおこなう。 可用性は,障害対策として,できるだけ止めずにデータベースを運用することを目的としている。もし,止める場合にも最小限の時間で,復旧することを目的としている。 障害が発生した場合に,速やかに復旧することは,非常に重要なことである。そのため,「レプリケーションやクラスタリングを使用すれば万全」と考えるのは,間違いである。もし,レプリケーションやクラスタリング自身に障害が発生すれば,必ずバックアップデータによって,復旧する必要がある。 また,誤ったデータベース更新を実行した場合,レプリケーションやクラスタリングは,すべてのサーバーが即座に更新を実行する。そのた
更新日:2005/09/06 ここではコマンドによるユーザーの管理を簡単に説明します。 ユーザーの権限を確認するには、SQLコマンドの SHOW GRANTSコマンドを使って確認できます。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く