データベース管理者

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

1
別のテーブルのすべての列を更新する
別のテーブルからテーブルを更新する必要があり、すべての列を更新する必要があります。SET句のすべての列をリストする以外に、それらを一度にすべて更新する方法はありますか?このような: update tableA set * = tableB.* from tableB where tableA.id = tableB.id 私はpsqlで試しましたが、うまくいきません。次のようにすべての列をリストする必要があります。 update tableA set c1 = tableB.c1, c2 = tableB.c2, ... from tableB where tableA.id = tableB.id tableB作成された使用create .. like tableA。したがって、それらは基本的に同一です。そして、私がそれをしている理由は、.csvデータを一時テーブルにロードしてから、の新しいデータに基づいてtableB更新する必要があるからです。ロックをできるだけ少なくする必要があり、整合性を維持する必要があります。「削除してから挿入」が良い選択肢かどうかわかりませんか?tableAtableBtableAtableA

5
SQL Serverテーブルの変更を検出する
私のアプリケーションでは、SQL Server 2012で実行されているDBを使用して、高価なクエリを定期的に実行し、後でアプリケーションがクエリできるテーブルに結果を書き込むジョブ(スケジュールされたタスク)があります。 理想的には、クエリが最後に実行されてから何かが変更された場合にのみ、その高価なクエリを実行したいと思います。ソーステーブルは非常に大きいため、すべての候補列などのチェックサムを選択することはできません。 私は次のアイデアを持っています: ソーステーブルで何かを変更するたびに、最後に変更されたタイムスタンプ、「クエリである必要があります」フラグ、またはこのようなものを追跡テーブルに明示的に書き込みます。 トリガーを使用して同じことを行います。 ただし、書き込みを明示的に追跡せずに、テーブルの変更を簡単に検出する方法があるかどうかを知りたいです。たとえば、ROWVERSIONテーブルなどの「現在」を取得できますか?

2
データベース設計:「(多対多)対多」関係の正規化
短縮版 既存の多対多結合の各ペアに、一定数の追加プロパティを追加する必要があります。基本ケースを拡張してこれを達成するために、利点と欠点の観点から、オプション1〜4のどれが最良の方法であるかを下の図にスキップしますか?または、ここで検討していないより良い代替手段がありますか? 長いバージョン 現在、中間結合テーブルを介して、多対多の関係にある2つのテーブルがあります。既存のオブジェクトのペアに属するプロパティにリンクを追加する必要があります。プロパティテーブルの1つのエントリが複数のペアに適用される場合があります(または1つのペアに対して複数回使用される場合もあります)が、各ペアにはこれらのプロパティが固定されています。私はこれを行うための最良の方法を決定しようとしていますが、状況をどう考えるかを整理するのに苦労しています。意味的には、次のいずれかと同等にうまく説明できるようです。 固定数の追加プロパティの1つのセットにリンクされた1つのペア 多くの追加プロパティにリンクされた1つのペア 1つのプロパティセットにリンクされた多くの(2つの)オブジェクト 多くのプロパティにリンクされた多くのオブジェクト 例 XとYの2つのオブジェクトタイプがあり、それぞれに一意のIDがあり、リンクテーブルのobjx_objy列x_idとがありy_id、これらが一緒にリンクの主キーを形成します。各Xは多くのYに関連付けることができ、その逆も可能です。これは、既存の多対多の関係のセットアップです。 規範事例 さらに、別のテーブルで定義された一連のプロパティと、特定の(X、Y)ペアがプロパティPを持つ必要がある一連の条件があります。条件の数は固定され、すべてのペアで同じです。基本的に、「状況C1では、ペア(X1、Y1)にプロパティP1があります」、「状況C2では、ペア(X1、Y1)にプロパティP2があります」など、結合の各ペアの3つのシチュエーション/条件についてテーブル。 オプション1 私の現在の状況であり、正確にこのような3つの条件があり、一つの可能性は、列を追加することですので、私は、それが増加することを期待する理由がないc1_p_id、c2_p_idとc3_p_idにfeatx_featy、与えられたために指定するx_idとy_id、どのプロパティp_id3例ごとに使用します。 これは、SQLが機能に適用されるすべてのプロパティを選択するのを複雑にし、より多くの条件に容易にスケーリングできないため、私にとって素晴らしいアイデアのようには見えません。ただし、(X、Y)ペアごとに一定数の条件の要件を強制します。実際、それはここで唯一のオプションです。 オプション2 条件テーブルを作成し、条件テーブルcondの主キーに条件IDを追加します。 これの1つの欠点は、各ペアの条件の数を指定しないことです。もう1つは、最初の関係だけを考えているとき、たとえば SELECT objx.*, objy.* FROM objx INNER JOIN objx_objy ON objx_objy.x_id = objx.id INNER JOIN objy ON objy.id = objx_objy.y_id 次に、DISTINCTエントリの重複を避けるために句を追加する必要があります。これは、各ペアが一度しか存在しないという事実を失ったようです。 オプション3 結合テーブルに新しい「ペアID」を作成し、最初のテーブルとプロパティと条件の間に2番目のリンクテーブルを作成します。 これには、各ペアに一定数の条件を強制しないこと以外に、最も不利な点があるようです。ただし、既存のIDのみを識別する新しいIDを作成することは理にかなっていますか? オプション4(3b) 基本的にオプション3と同じですが、追加のIDフィールドは作成されません。これは、新しい結合テーブルに両方の元のIDを配置することで実現されるため、の代わりにx_idとy_idフィールドが含まれますxy_id。 この形式のもう1つの利点は、既存のテーブルを変更しないことです(まだ運用されていません)。ただし、基本的にテーブル全体を複数回複製する(または、とにかくそのように感じる)ので、理想的とも思えません。 概要 私の感じでは、オプション3と4は十分に似ており、どちらでも使用できます。プロパティへの少数の固定数のリンクの要件がなければ、オプション1が他の場合よりも合理的に見えるようになるでしょう。いくつかの非常に限られたテストに基づいDISTINCTて、クエリに句を追加してもこの状況でのパフォーマンスに影響はないようですが、オプション2が他の状況と同様に状況を表すかどうかはわかりません。リンクテーブルの複数の行の同じ(X、Y)ペア。 これらのオプションの1つが私の最善の方法ですか、または考慮すべき別の構造がありますか?

3
高いCXPACKETおよびLATCH_EX待機
私が取り組んでいるデータ処理システムのパフォーマンスに問題があります。大量のCXPACKETおよびLATCH_EX待機イベントを示す1時間のperoidから待機統計を収集しました。 システムは3つの処理SQL Serverで構成され、多数の数値計算と計算を実行してから、中央のクラスターサーバーにデータを供給します。処理サーバーでは、一度に最大6つのジョブを実行できます。これらの待機統計は、ボットネックを引き起こしていると思われる中央クラスターに関するものです。中央クラスタサーバーには、16コアと64GB RAMがあります。MAXDOPは0に設定されます。 CXPACKETは実行中の複数の並列クエリからのものであると思いますが、LATCH_EX待機イベントが何を示しているのかわかりません。私が読んだことから、これは非バッファ待機かもしれませんか? これらの種類の待機統計の原因が何であるか、このパフォーマンス問題の根本原因を調査するために私が取るべき措置は何ですか? 上位のクエリ結果は合計待機統計であり、下位のクエリ結果は1時間の統計です。

2
SQL Server 2012 Expressのインストールは、「データベースエンジンの起動ハンドルが見つかりませんでした」というエラーで失敗します。
SQL Server Express 2012 w / SP1 x64をWindows 7 SP1 x64にインストールしようとしています。このマシンには、以前にSQL Server Express 2012がインストールされていました。このインスタンスはSQL Server 2012 Standardにアップグレードされ、その後アンインストールされました。 インストール中に選択されるオプションは次のとおりです。 SQL Server製品の更新をインストールに含める-KB 2793634に関連する2 すべての機能をデフォルトのディレクトリにインストールします デフォルトのインスタンスルートディレクトリにある名前付きインスタンスSQLEXPRESS 既定のサービスアカウント:SQL Serverデータベースエンジン-> NT Service \ MSSQL $ SQLEXPRESS デフォルトのデータベースエンジン構成 インストールは次のエラーで失敗します。 TITLE:Microsoft SQL Server 2012 Service Pack 1セットアップ 次のエラーが発生しました。 データベースエンジンの起動ハンドルが見つかりませんでした。 ヘルプについては、http://go.microsoft.com/fwlink?LinkID = 20476&ProdName = Microsoft%20SQL%20Server&EvtSrc = setup.rll&EvtID = …

3
DISTINCT FROMは、何らかの方法ですべてまたはすべてと組み合わせることができますか?
組み合わせのPostgresの道であるIS DISTINCT FROMとANYかと同じ結果を得るための他のいくつかのきちんとした方法は? select count(*) from (select 'A' foo union all select 'Z' union all select null) z where foo <> any(array[null, 'A']); count ------- 1 (1 row) select count(*) from (select 'A' foo union all select 'Z' union all select null) z where foo is distinct from any(array[null, 'A']); …

5
eコマース注文表。価格を節約するか、監査/履歴テーブルを使用しますか?
初めてのeコマーススキーマを設計しています。私はしばらくの間このテーマについて読んでいますが、との関係について少し混乱order_line_itemしていますproduct A productを購入できます。さまざまな詳細がありますが、最も重要なのはunit_priceです。 Anがorder_line_itemへの外部キーがあるproduct_id、購入quantity購入しunit_priceた時点で、顧客が製品を購入します。 私が読んだもののほとんどは、を明示的に追加unit_priceするorder_line_item必要がある(つまり、を介して参照しないproduct_id)と述べています。店舗は将来的に価格を変更する可能性があり、注文レポート、追跡、整合性などを台無しにする可能性があるため、理にかなっています。 私が理解していないことは、なぜunit_price値を直接保存するのorder_line_itemですか? のunit_price変更を記録する監査/履歴テーブルを作成する方が良いproductでしょうか? ときにorder_line_item作成され、の外部キーproduct_auditテーブルが追加され、価格はそこから(参照によって)取得することができます。 このアプローチを使用することには多くの利点があるように思えます(データの重複、価格変更履歴など)。このアプローチを使用するeコマーススキーマの例に出くわしていませんが、何か不足していますか? UDPATE:私の質問はSlowly Changing Dimensionに関連しているようです。ただし、緩やかに変化するディメンションはデータウェアハウスとOLAPに関連しているため、私はまだ混乱しています。それで、Slowy Changing Dimensionタイプをメインのビジネストランザクションプロセスデータベース(OLTP)に適用できますか?私は多くの概念を混ぜているのだろうか、いくつかのガイダンスを大いに感謝します。

1
sys.partition.rows列はどれくらい正確ですか?
システムビューにsys.partitionsは、特定のパーティション内の行の総数である「行」列があります。パーティション化されていない(または見方によってはパーティションが1つしかない)テーブルの場合、この列はテーブル内の行数を示します。 私はこの列がどれほど正確か、そしての代わりにそれを使用できるかどうかに興味がありSELECT COUNT(1) FROM TableNameます。テーブルを作成して数千行を追加し、数百を削除し、さらに数千を追加するなど、いくつかの実験を行いましたが、カウントは常に無効になっています。ただし、約700ミリ行と複数のインデックスを持つ1つのテーブルがあります。sys.partitionsクラスター化インデックスの行は再び無効になりますが、他のインデックスにはわずかな変動(+ -20k)が見られます。 この行がどのように計算され、表示されるのと同じくらい正確かどうかは誰にもわかりますか?

3
SQL Serverは、等しい比較ではなく、類似の比較ではないvarchar値の自動トリム
今日、SQL Serverでいくつかの興味深い動作(2005年と2012年に観測)に遭遇しました。 =NVARCHARフィールドを使用して比較を行うクエリは、文字列の末尾のスペースを無視しました(または比較前に値を自動トリミングしました)が、like演算子を使用した同じクエリはスペースを無視しませんでした。使用されている照合は、2012年にLatin1_General_CI_ASです。 このSQL Fiddleを検討してください:http : //sqlfiddle.com/#!6/72262/4 like演算子は末尾のスペース文字列の結果を返さないが、演算子は返すことに注意してください=。どうしてこれなの? ボーナスポイント:これをVARCHARフィールドに複製することはできません。スペースは両方のデータタイプで同じように処理されると考えていました。これは本当ですか?

3
一時的なMEMORYテーブルを削除しない場合、どのくらい持続しますか(MySQL)
MySQLの再帰ストアドプロシージャを使用してという一時テーブルを生成してid_listいますが、フォローアップ選択クエリでそのプロシージャの結果を使用する必要があるためDROP、プロシージャ内で一時テーブルを使用できません... BEGIN; /* generates the temporary table of ID's */ CALL fetch_inheritance_groups('abc123',0); /* uses the results of the stored procedure in the WHERE */ SELECT a.User_ID FROM usr_relationships r INNER JOIN usr_accts a ON a.User_ID = r.User_ID WHERE r.Group_ID = 'abc123' OR r.Group_ID IN (SELECT * FROM id_list) GROUP BY …

2
マスター/スレーブレプリケーションの代わりにGalera Clusterを使用することの欠点は何ですか?
通常のマスター/スレーブレプリケーションの代わりにGalera Clusterを使用することの欠点は何ですか?Galeraの0スレーブラグタイム、同期レプリケーション、および単一障害点がないことは非常に魅力的であるように思われますが、なぜGaleraクラスターは一般的ではないのですか?

1
BitlockerでSQL Server 2012 Standardを使用する
Bitlockerを使用してSQL Server 2012データベースを保護しようとしています。Bitlockerを機能させるための問題はありません。問題は、ドライブがロックされると、SQL Serverがデータを読み取れなくなることです。 もちろんTDEを使​​用したいのですが、それはEnterpriseエディションに限定されているため、これはやめましょう。サーバーでTPMがアクティブになっています。これはWindowsドメインにあり、Windows認証を使用します...しかし、ドライブが暗号化されると、DBに何もアクセスできなくなります。 ここに何が欠けていますか?

2
大きなmysqlテーブルにインデックスを追加する
テーブルがあります | base_schedule_line_items | CREATE TABLE base_schedule_line_items( idint(10)unsigned NOT NULL AUTO_INCREMENT、 installmentint(10)unsigned NOT NULL、 on_datedate NOT NULL、 actual_datedate DEFAULT NULL、 payment_typeint(11)NOT NULL、 scheduled_principal_outstandingdecimal(65,0)NOT NULL、 scheduled_principal_duedecimal(65,0) NOT NULL、 scheduled_interest_outstandingdecimal(65,0)NOT NULL、 scheduled_interest_duedecimal(65,0)NOT NULL、 currencyint(11)NOT NULL、 updated_atdatetime NOT NULL DEFAULT '2013-01-06 14:29:16'、 created_atdatetime NOT NULL DEFAULT ' 2013-01-06 14:29:16 '、 loan_base_schedule_idint(10)unsigned NOT NULL、 …

3
データベース管理者になりたい-開始方法 [閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 6年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け付けていません。 大学でデータベースコースを受講したところ、とても魅力的でした。私はこの分野でもっと学びたいと思っていますが、始める方法に少し迷いました。 データベース管理者になるにはどうすればよいですか?キャリア分野に入るためのヒントとコツは何ですか?5年以上の経験を求める求人がたくさんありますが、どのように始めればいいのかわかりません。 私が探すべきエントリーレベルの仕事はありますか?どのようなスキル、特性、または認定が私を助け、またはより多くの経験を得るのに役立ちますか?私は主にMySQLに興味があります。

3
ユーザー定義のテーブルタイプを作成し、同じトランザクションで使用できますか?
次を実行すると(管理スタジオで、GOはコマンドをバッチに分割します) use tempdb begin tran go CREATE TYPE dbo.IntIntSet AS TABLE( Value0 Int NOT NULL, Value1 Int NOT NULL ) go declare @myPK dbo.IntIntSet; go rollback デッドロックエラーメッセージが表示されます。私のプロセスはそれ自体でデッドロックしました。この動作は2008年、2008R2、2012年に見ました。 作成された同じトランザクション内で新しく作成されたタイプを使用する方法はありますか?

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