データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

7
マテリアライズドビューの代わりにテーブルを使用しないのはなぜですか?
Oracleデータベースは初めてです。私が正しく理解している場合、マテリアライズドビューは結果セットがデータベースの物理テーブルとして保存されているビューであり、このビュー/テーブルは何らかのパラメーターに基づいて更新されます。ビューが物理テーブルとして保存されている場合、最初にテーブルにデータを保存してみませんか?それでは、テーブルの代わりにマテリアライズドビューを使用する利点は何ですか?

6
「最新の対応する行」を効率的に取得するにはどうすればよいですか?
非常に一般的なクエリパターンがありますが、効率的なクエリを作成する方法がわかりません。別のテーブルの行の「後ではなく最新の日付」に対応するテーブルの行を検索したい。 inventoryたとえば、特定の日に保有する在庫を表すテーブルがあります。 date | good | quantity ------------------------------ 2013-08-09 | egg | 5 2013-08-09 | pear | 7 2013-08-02 | egg | 1 2013-08-02 | pear | 2 そして、「価格」と言うテーブルは、特定の日に財の価格を保持します date | good | price -------------------------- 2013-08-07 | egg | 120 2013-08-06 | pear | 200 2013-08-01 | egg | 110 …

1
ハロウィーンの保護を超えた機能をスケジュールすることには何か利点がありますか
SCHEMABINDING関数が更新計画で不要なスプールを回避できることはよく知られています。 テーブルに触れない(つまり、データにアクセスしない)単純なT-SQL UDFを使用している場合SCHEMABINDING、UDFの作成中にオプションを指定してください。これにより、UDFがスキーマバインドされ、クエリオプティマイザーがこれらのUDFに関連するクエリプランに対して不要なスプール演算子を生成しないようにします。 SCHEMABINDINGデータにアクセスしない場合でも、関数には他の利点がありますか?

3
ワイルドカード(またはトップ)の追加に関するSQL Serverクエリの大幅な減速
SQL Server 2005データベースで追跡する2,000万匹の動物園があります。それらの約1%は黒で、約1%は白鳥です。私はすべての黒い白鳥の詳細を取得したかったので、私がやった結果ページを埋めたくありませんでした。 select top 10 * from animal where colour like 'black' and species like 'swan' (はい、これらのフィールドはフリーテキストですが、両方ともインデックス付けされています)。クエリが約300ミリ秒で空のセットを返すため、このような動物はいません。「いいね」ではなく「=」を使用した場合、約2倍の速さでしたが、入力の手間を省くという予感があります。 頭の飼育係は彼が白鳥のいくつかを「黒っぽい」と入力したかもしれないと思うので、それに応じてクエリを修正します: select top 10 * from animal where colour like 'black%' and species like 'swan' どちらもありません(実際、「黒」以外の「黒%」動物はありません)が、クエリが空になるまでに約30秒かかります。 それは、「top」と「like%」の組み合わせだけが問題を引き起こしているようです select count(*) from animal where colour like 'black%' and species like 'swan' すぐに0を返し、さらに select * …

7
PostgreSQLでデータベーススナップショットをすばやく作成/復元することは可能ですか?
まず、私はDBAやシステム管理者ではなく、開発者です。優しくしてください:) 私は、単一のユーザーアクションがデータベースの複雑な変更をトリガーするアプリケーションワークフローに取り組んでいます。いくつかのテーブルで数百のレコードを作成し、他のテーブルで数百のレコードを更新します。 )このアクションに触れます。複雑なため、別のテストを実行する前にすべての変更を手動で元に戻すのは非常に困難です。ほとんどの開発期間中、ワークフローの終わり近くに「ROLLBACK」ステートメントを挿入するだけで済みますが、変更のコミットが近づいたら、本物をテストする必要があります。 運用する運用データベースのローカルコピーがあります。私の場合、テスト間のダ​​ンプと復元は、すべての変更を取り消すスクリプトを書くよりも高速です。それは高速ですが、それでも私はかなり遅くなります(私のラップトップでの復元には約20分かかります)。データベースの現在の状態のスナップショットを保存して、すぐに復元する方法はありますか? システム上の唯一のユーザーであることが保証されており、ルートアクセス権があります。データベースダンプは、tarおよびgzipで圧縮された場合、約100 MBです。PostgreSQLバージョンは8.3です。 役立つアイデアを事前に感謝します。

1
MySQLでテーブルを交換するにはどうすればよいですか?
時々foo計算されるいくつかの統計を含むテーブルがあるとします。他のクエリで頻繁に使用されます。 だからこそ、最新の統計を計算foo_newし、計算の準備ができたらそれらを交換したいのです。 私はそれをできた ALTER TABLE foo RENAME foo_tmp; ALTER TABLE foo_new RENAME foo; しかしfoo、テーブルがないときにクエリがこれらの2行の間にテーブルを必要とする場合はどうなりますfooか?どういうわけかロックする必要があると思います...または別の方法がありますか?

7
ORDER BYがビューに属さないのはなぜですか?
私はあなたが視野に入れないことを理解し ています 。(少なくとも私が作業しているSQL Server 2012では) ORDER BY また、ビューを並べ替える「正しい」方法は、ビューを照会するステートメントをORDER BY囲むSELECTことです。 しかし、実用的なSQLとビューの使用法が比較的新しいので、なぜこれが設計によって行われるのかを理解したいと思います。履歴を正しく追跡していれば、これはかつて可能であり、SQL Server 2008などから明示的に削除されました(正確なバージョンについては引用しないでください)。 ただし、Microsoftがこの機能を削除した理由について私が思い付くことができる最も良い理由は、「ビューはデータの並べ替えられていないコレクション」だからです。 ビューをソートしない理由に関して、論理的で適切な理由があると思います。ビューが単なるフラット化されたデータのコレクションになれないのはなぜですか?なぜ特別に未ソートなのですか?ソートされたビューを持つことは完全に直感的であると思われる状況(少なくとも私にとって/ IMHO)を思い付くのはそれほど難しくないようです。

3
InnoDBがすべてのデータベースを1つのファイルに保存するのはなぜですか?
MyISAMを使用して各テーブルを対応するファイルに保存すると便利でした。InnoDBは多くの面で進歩を遂げましたが、なぜInnoDBがすべてのデータベースを1つのファイルに保存するのか疑問に思います(ibdata1デフォルト)。 InnoDBがテーブルの個々のインデックスファイルによってファイル内のデータの場所をマップすることは理解していますが、1つのファイルにすべてのデータが混在する理由はわかりません。さらに重要なのは、なぜサーバー上のすべてのデータベースのデータを混合するのですか? MyISAMの興味深い機能は、データベースフォルダーを別のマシンにコピー/貼り付けしてから、データベースを(ダンプなしで)使用できることです。


4
2008 R2よりもSQL Server 2012を好む客観的なビジネス上の理由は何ですか?
私の会社は、新しいデータベースサーバー用にSQL Server 2012 DenaliとSQL Server 2008 R2のどちらを購入するかの決定に直面しています。客観的な理由を探して、どちらかを選択します。 私たちの要件: Standardエディション(経済的理由およびエンタープライズ機能の必要性の欠如のため) OLTPワークロード(つまり、新しいウィンドウ関数と列ストアインデックスは不要です) 10〜100 GBのデータベースサイズ ビジネスインテリジェンス機能は必要ありません。リレーショナルエンジンのみが必要です 同期データベースミラーリング 現在、次の理由がわかっています。 SQL Server 2012デナリ 利用可能な最新バージョン SQL Server 2008 R2 実績のある技術 どちらか一方を好むという技術的な理由はあまりないようです。基本的に、成功している実績のあるテクノロジーと、利用可能な最新かつ最高のバージョンを選択することになります。 決定を下す客観的な理由は何ですか?

4
ストアドプロシージャの結果を保持できるSQL Serverで一時テーブルを作成する最も簡単な方法は何ですか?
多くの場合、SQL Serverを扱うときは次のようなものを書く必要があります。 create table #table_name ( column1 int, column2 varchar(200) ... ) insert into #table_name execute some_stored_procedure; ただし、ストアドプロシージャの結果は退屈なタスクであるため、正確な構文を持つテーブルを作成します。たとえば、sp_helppublicationの結果には48列あります!これを行う簡単な方法があるかどうかを知りたいです。 ありがとう。

6
WHERE 1またはWHERE 1 = 1を使用する理由
通常、クエリステートメントで条件が必要ない場合は、WHERE句を使用しません。しかしWHERE 1、他の条件が存在しない場合でも、多くの場所で句が使用されているのを見てきました。 なぜこれが行われるのですか? 実行時間に特定の利点はありますか? 他の機能を有効にしますか? WHERE 1=1これに似たものを使用していますか?
50 mysql-5.1 

5
SQL Serverオプション「アドホックワークロード用に最適化」を使用しないのはなぜですか?
このようなKimberly TrippによるSQL Serverプランのキャッシュに関するいくつかの素晴らしい記事を読んでいます:http : //www.sqlskills.com/blogs/kimberly/plan-cache-and-optimizing-for-adhoc-workloads/ 「アドホックワークロード向けに最適化する」オプションさえあるのはなぜですか?これは常にオンにすべきではありませんか?開発者がアドホックSQLを使用しているかどうかに関係なく、それをサポートするすべてのインスタンス(SQL 2008+)でこのオプションを有効にしないのはなぜですか?


6
顧客ごとにデータベースを作成すると、どのような問題が発生しますか?
stackoverflowポッドキャストから、Fog CreekはFogbugzの顧客ごとにデータベースを使用していることを覚えています。これは、Fogbugz On Demandサーバーに何万ものデータベースがあることを意味すると思います。 Webアプリの開発を始めたばかりで、同様の問題を解決する必要があります(独自の分離データを持つ多くの顧客)。 顧客ごとにデータベースを使用する場合、どのような問題が予想されますか?どうすれば解決できますか? 私の最初の考え 顧客ごとのデータベースの利点 よりシンプルなデータベーススキーマ シンプルなバックアップ-他の顧客に実際に影響を与えることなく、各顧客を順番にバックアップできます。 特定の顧客データを簡単にエクスポートできます。 キャッシュパフォーマンスの向上-よりアクティブなテーブルの1つへの書き込みは、書き込みを実行した単一の顧客にのみ影響します。 ハードウェア全体で簡単に拡張できます。たとえば、1台から2台のサーバーに移動する必要がある場合、顧客の半分を新しいサーバーに移動するだけです。 欠点 MySQLは5,000個のデータベースに対応できますか?パフォーマンスは低下しますか? スキーマへの変更は、すべてのデータベースに複製するのが難しい場合があります。スキーマのバージョン管理や、データベースをあるバージョンから別のバージョンに移行する方法を理解するスクリプトなど、このための自動化された計画が本当に必要になります。 すべてのお客様に共通することを行うことは、厄介または不可能かもしれません 上記と似ていますが、すべてのお客様に対して実行したい分析は不可能かもしれません。たとえば、すべての顧客の使用状況をどのように追跡する必要がありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.