2011-08-17 12 views
5

私たちは、私たちの会社でシンプルな "crmのような"ソフトウェアを持っています。いくつかの時間、日常的なクエリを取っていたいくつかの複雑なクエリがあります...私は必要なすべての複雑な結合やサブクエリを置き換えるためにテンポラリテーブルを使用するいくつかの変更をテストしています。MYSQL一時テーブル - アクティブなものを表示する方法

これまでのところ、本当にうまくいって、90%以上のスピードを得ました。

Webアプリケーション(codeigniter + mysql)以来、私はそれを "実動テスト"環境に置く予定です。そのため、ユーザーの50%がテストを手助けすることができます。私は、アクティブなテーブルと、可能であれば各テーブルを監視したいと思います。

私の質問です。 - mysqlインスタンスでアクティブなすべてのテンポラリテーブルを表示する方法はありますか?多分そのデータを表示しますか?

私はPLUGINまたは何かについて何かを読んだが、記事ははるかに乱雑で、私は理解できなかった。

私の母国語ではなく、私の英語のために申し訳ありません。

+0

は、http://www.serverfault.comに属します。システム管理者およびデスクトップサポート担当者のQ&A – Mchl

答えて

-1

データセットが大きくなると、一時テーブルは役に立ちません。結局、彼らはどのように助けますか?結果を計算した後にデータをそれらのテーブルにコピーする必要があります。なぜmemcachedで結果をキャッシュしないのですか?

また、私は幾分大きい(数十ギガバイト)データベースを見てきましたが、1台のマシンから実行されていて、クエリがすばやく実行されていました。データベースサーバーを適切に構成した(ソフトウェアとハ​​ードウェア)かどうかという疑問があります。あなたは一時的なスピードアップを経験しているかもしれませんが、それが永久に働くという保証はありません。私は、アプリケーションを実行するために必要なアプリケーション、クエリ、ソフトウェア、ハードウェアを最適化し、クエリ結果の最新のホットコピーが必要な場合を除き、memcacheで結果をキャッシュします。

+1

テンポラリテーブルは、多数のテーブルからのデータを使用して多数の更新を行う場合、複雑なクエリに非常に便利です。 –

+0

@michaelhanonあなたの不同意は、単一の事実を言及したり、言及したりしません。それは単にそれがあなたの個人的な意見であることを意味します。あなたは反対することができますが、それはあなたが正しいことを意味するものではありません。 –

4

一時テーブルは=一時的な、それは右のクエリ後に削除

すべてのクエリをログに記録し、1対1のクエリがtmp_table

システム変数を必要とする試験に実行する以外に直接的な解決策は、ありません以下のようなCreated_tmp_tablesは、一時テーブルの問題の

mysql> show status like '%tmp%'; 
+-------------------------+-------+ 
| Variable_name   | Value | 
+-------------------------+-------+ 
| Created_tmp_disk_tables | 0  | 
| Created_tmp_files  | 0  | 
| Created_tmp_tables  | 0  | 
+-------------------------+-------+ 
1

一つは、実際の使用状況を追跡しているいくつかのアイデアを与えるかもしれません、そして、作成インデックス作成とそれらを削除するオーバーヘッドがあります - 特にウェブアプリでテンポラリテーブルの存続期間は、通常、HTTPリクエストの有効期間と同じです。

事前コンパイルされた結果(つまりマテリアライズドビュー)は、従来のテーブルを設定して、MySQL接続ID/WebセッションID /ソースクエリ+時間を参照するフィールドを追加しますデータのTTLと、共有するかどうかを指定します。

テーブルの使用状況の詳細なトラッキングを取得するだけでなく、クエリのチューニングにも簡単に対応できるようになりました。もちろん、スキーマはよりよく文書化されています。

-1

ビューの一時表には意味がありません。なぜなら、接続中に生きていて、接続を閉じた後に死んでしまうからです。しかし、一時的なテーブルについて重要な事実が1つあります。したがって、スクリプトで永続的な接続を使用すると、この接続の存続中に一時テーブルが存続し、この接続を使用するクライアントは同じ一時テーブルにアクセスします。この場合も、tempテーブルはシステムリソースを消費します。これを回避するには、この一時テーブルで使用されるクエリの実行に必要なクエリを実行した後、手動でテンポラリテーブルを削除する必要があります。

関連する問題