ほとんどの場合、一時テーブルを使用する方法とは異なる方法があります。
私はそれらを検討する唯一の時間は、次の条件である:
- 活動はまれです。意味、指定されたユーザーは1週間に1回この操作を行います。
- 通常のデータの完全インポートを行う前に、保持容器として使用されます。
- 充填前に構造が未知のデータを扱います。
3人とも、実行時にデータマッピングが定義されている一般的な一括インポートルーチンを構築することになります。
アプリケーションで一時テーブルを頻繁に作成している場合は、おそらくより良い方法があります。
スケーラビリティは、ロードされるデータの量と一時テーブルの使用頻度に依存します。人身売買が少ないサイトでは大丈夫かもしれません。
私たちは、クライアントのアプリによって大量の一時テーブルの使用をリッピングしています。システム内のクエリの90%が一時テーブルを作成します。すべてのクエリの分析によると、元の開発者は単にSQLを理解できなかったためにこのメカニズムを使用していました。新しいユーザーがシステムに追加されると、パフォーマンスが大幅に低下するため、これを実行しています。
ユースケースを投稿できますか?たぶん代替メカニズムを提供するのに役立つかもしれません。
UPDATE:
今、私たちはユースケースを持っていることを、ここにあなたが必要なものを達成するために、簡単なテーブル構造です。 [必要に応じて、またはchar(10)]
表ジップコード
ジップコードCHAR(5)は、緯度または何等の必要に応じて
CityNameのVARCHAR(50) *他の列。
表TempReadings
ジップコードCHAR(5)ジップコードテーブルへの外部キー]
ReadingDate日時
温度フロート(または同等品)
所与ジッパーのためのすべての温度測定値を取得しますあなたがメインの郵便番号テーブルからの情報が必要な場合
select ZipCode, ReadingDate, Temperature
from TempReadings
:あなたのような何かをするコード
select Z.ZipCode, Z.CityName, TR.ReadingDate, TR.Temperature
from ZipCodes Z
inner join TempReadings TR on (TR.ZipCode = Z.ZipCode)
add where句は必要に応じて追加します。上記のいずれも郵便番号ごとに別々のテーブルを必要としないことに注意してください。
サブクエリをサポートするMySQLのバージョンにアップグレードして以来、コード内に一時テーブルを作成することは非常に珍しいようです。 – TehShrike
私は米国のすべての郵便番号のための5年間の毎日の温度を持っています。私はこれを私のデータベースの非一時テーブルに保存します.... 2列:そのジップの毎日のtemps。私はこうして1つのテーブルを持っています。データを選択する際に、文字列を分割してテンポラリテーブルに入れ、別のテーブルに保存したいくつかのデータを組み合わせてユーザに提供します。テンポラリテーブルがパフォーマンスに本当に影響を与えますか? –
@ user522962:文字列分割などと組み合わせた一時テーブルは、確かにリソースの浪費であり、DBサーバーへの不必要な負荷を追加します。なぜあなたは連結して文字列を分割するのですか?郵便番号、日付、および一時的な読み込みがすでに含まれている関連テーブルを持っているほうがはるかに優れているようです。これははるかに扱いやすくなります。 – NotMe