mysql:11409
From: zen kishimoto <zen kishimoto <zen@xxxxxxxxxx>>
Date: Thu, 12 May 2005 20:46:14 -0700
Subject: [mysql 11409] 5章: Joins, Temporary Tablesと Transactions, 「Beginning MySQL,Database Design and Optimization: From Novice to Professional」
5章: Joins, Temporary Tablesと Transactions http://dev.mysql.com/tech-resources/articles/mysql-db-design-ch5.html MySQL Developer Zone は2004年に出版された Jon Stephens・Chad Russell共著の「Beginning MySQL Database Design and Optimization: From Novice to Professional」 (http://www.apress.com/book/bookDisplay.html?bID=338) の一部をここに発表する許可を得ました。 そこで、5章の Joins, Temporary TablesとTransactionsを 選択しました。 この章ではMySQLのアプリケーションをスピードアップ できる3つの機能について述べます。3つはお互いに直接 は関連していませんが、それぞれを使用すればデータベースのサイズや コードのオーバーヘッドを削減することができます。コードレベルで クエリやオペレーションを組み合わせて少ない数のユニット にすることで達成します。 * Joinは1つのSQLステートメントで複数のテーブルから データを選択できるようにします。 * Temporary tableはクエリから抽出したデータを新しい テーブルに格納する方法を提供します。それは現在 のMySQLのユーザセッションが続く限り何度もクエリすることが できます。 * Transaction は関連したオペレーションを1つの グループとしてまとめ、全てのオペラーションが全て 成功するか失敗するかのように実行できます。 それぞれの機能に関して述べます。つまりそれは何か、どのように 動作するのか、アプリの中でどう使うのかです。 joinの背景にあるのは比較的簡単です。 1つのクエリを 発する方が幾つものクエリを発するよりも効率が良いのです。 幾つもの場合だと1つのクエリの結果が他のクエリの 条件となります。 何種類かのjoinがあります。違いはどのように1つのテーブル が関連する他のテーブルとマッチしないときにその 列の値を 処理するかです。 それぞれを順番にカバーします。その他2つの定番 (theta-styleとANSI-style) のjoin に関して述べます。その他MySQLで使用可能な関連して 形態も述べます。 temporary tableを使用することで時間と労力の節約となり ます。特に大きくて似通った結果を返還する 複数のクエリを扱うときに有効です。 1つのセッションで 同じテーブルのデータの部分集合を何回か取り扱う場合、一度 だけ取り上げてテンポラリーのテーブルに格納する方が他の 方法よりも速いです。他の方法はプログラムの内部(arrayや hash) に格納するか、複雑なjoinを数回行うことです。 共通のデータの大部分を含む幾つかの結果使用して いる場合、必要な全てのデータを含む結果を入手してテンポラリー のテーブルに格納してこのテンポラリーのテーブルから選択 するのが望ましいです。テンポラリー・テーブルはMySQLで 使用するのに適しています。なぜならば、テンポラリ テーブルはそれぞれのユーザセッションにつきユニークだからです。 どういう意味かの詳細とどのように使用するかを述べます。 Transactionは有益です。データの完全性を保証する方法を提供する からです。トランザクションを使った方が効率が良いです。 例えば、それぞれのクエリをアプリケーションのロジック で戸別に処理したり、成功・失敗をテストしたり、失敗した 際元の状態に戻すことを考えるとこちらの方が効率が良いです。 InnoDBかBerkeley DB (BDB) テーブルかトランザクションを使うと MySQLにこのタスクを自動的に行わせることができます。使用すると 使用しない時に比べて速くなるわけではありません。実際 MyISAM テーブル(トランザクションをサポートしません) はInnoDBまたは BDB テーブル (トランザクションをサポート)より 速いです。しかし、開発の時間を節約でき、アプリも多くの コードを要しません。それはそれぞれのクエリを戸別に テストしたり元に戻したりする必要がないからです。 この章では基本的なトランザクションの理論と、 MySQLでどのように実装されているかをカバーしましす。後の章 (7章)でPHP, Pythonと Perl で使用されているかを見ます。 全部の記事は長いのでPDFのファイルにしました。ここから ダウンロードできます。登録は必要ありません。(但し英語) http://dev.mysql.com/tech-resources/articles/mysql-db-design-ch5.pdf