データベース管理者

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

1
SQL Serverクエリの動作が、UPDATEとSELECTで異なるのはなぜですか?
フィールドでパーティション分割した後、レコードを連続番号に更新するSQL Serverクエリを作成しました。SELECTステートメントとして実行すると、すべてが見栄えがします。 DECLARE @RunDetailID INT = 448 DECLARE @JobDetailID INT SELECT @JobDetailID = [JobDetailID] FROM [RunDetails] WHERE [RunDetailID] = @RunDetailID SELECT [OrderedRecords].[NewSeq9], RIGHT([OrderedRecords].[NewSeq9], 4) FROM ( SELECT [Records].*, [Records].[SortField] + RIGHT('0000' + CAST(ROW_NUMBER() OVER(PARTITION BY [Records].[SortField] ORDER BY [Records].[RunDetailID], [Records].[SortField], [Records].[PieceID]) AS VARCHAR), 4) NewSeq9 FROM ( SELECT [MRDFStorageID], [RunDetailID], …

1
SQL Serverはいつロックを取得しますか?
ここにあるSQL Serverの分離レベルのリストには、トランザクション内で取得された書き込みロックは、トランザクションが終了するまで保持されることが記載されています。ただし、これらのロックがいつ取得されるかについては触れられていません。 ロックはデフォルトでトランザクションの開始時に取得されますか、それとも必要なときに取得されますか?後者が当てはまる場合、Xのロックが保持される時間を最小限に抑えるために、大規模なトランザクションでは書き込み操作をできるだけ遅く実行する方が有利でしょうか。

1
左から2番目の特定の文字が出現した後に文字列を削除します
テーブル列にこのタイプの値があります 154646@8@486 45465@6464@654 等 2番目の@文字の後にすべてを削除するにはどうすればよいですか?表示する必要があります 154646@8 45465@6464 私はすべての@に対してのみ実行できますが、2番目には実行できません SELECT REPLACE(LEFT('45@Tra@lala', CHARINDEX('@','45@Tra@lala')-1),'_',' ') 45を返すが45 @ Traは返さない ありがとうございました :-)
10 sql-server 

2
インデックスを追加することのコスト/メリットを判断するにはどうすればよいですか?
クレイグ・リンガーによると: 通常、参照側の外部キー列(またはそれを含む)にインデックスを作成することをお勧めしますが、必須ではありません。追加するインデックスごとにDML操作が少し遅くなるためINSERT、UPDATEまたはごとにパフォーマンスコストが発生しDELETEます。インデックスがめったに使用されない場合、その価値はないかもしれません。 インデックスを追加するメリットがコストを上回るかどうかをどのように判断しますか? インデックスを追加する前後に単体テストのプロファイルを作成し、全体的なパフォーマンスの向上を確認しますか?それとももっと良い方法がありますか?

1
複数の.mdfファイルを含むデータベース
オンラインで検索しましたが、探しているものが見つかりません。 問題/クエリは、私の知る限り、SQL Serverのデータベースには1つの.mdfファイルと、おそらくいくつかの.ndfファイルと1つの.logファイルが必要です。 1つのmdfファイルと複数のndfファイルを持つ多くのデータベースを見てきました。しかし最近、すべてのデータベースに複数のmdfファイルが存在するサーバー上のデータベースに遭遇しました。 一部のデータベースのバックアップを取り、それらを別のサーバーに移動し、プライマリファイルを.mdfとして、その他のすべてのファイルを.ndfとして復元しました。 今私の質問は: データベースに複数の.mdfファイルを作成することには、何か賢明なことはありますか? 複数の.mdfファイルがあることの欠点はありますか? そうだった SQL Server 2008 R2 64bit Enterprise Edition 正しい方向へのアドバイスやポインタは大歓迎です。ありがとうございました。

1
TSQL変数の方がTopの方が速いのはなぜですか?
皆さんおはよう、 サードパーティ製品のデータベースからデータを「取得」して、自社の自社アプリケーションで表示するために、ある程度複雑なSQLに取り組んでいます。 サブクエリ内のテーブルからトップレコードを取得するために選択に追加しました(それが理にかなっている場合) クエリは、100レコードの最終結果セットを返すのに3分近くかかりました。 SELECT TOP 1 ... 私が達成しようとしていたことの改善点をオンラインで見て、以下のように変数を使用するように選択を変更するよう提案されました DECLARE @topCount INT SET @topCount = 1 SELECT TOP (@topCount) ... これは、3分から1秒まで同じクエリを使用しました。 しかし、これがそうである理由を誰かが説明できますか?
10 sql-server  t-sql 

1
SSISに接続する特権を付与するにはどうすればよいですか?
dtexec.exeを使用してSSISパッケージを実行しようとすると、次のエラーメッセージが表示されました。 Could not load package "D:\Filename.dtsx" because of error 0xC00160AE. Description: Connecting to the Integration Services service on the computer "" failed with the following error: "Access is denied." By default, only administrators have access to the Integration Services service. On Windows Vista and later, the process must be running …

3
クラスタ化インデックスで再構築しますが、なぜデータサイズが縮小するのですか?
約15 GBのデータが含まれ、データサイズが5 GBに縮小されたテーブルのクラスター化インデックスで再構築を行った場合、これはどのように行われますか?どのような「データ」が削除されますか? データサイズは、DBCC sp_spaceusedの "data"列を意味します クラスタ化インデックスで再構築する前: name rows reserved data index_size unused LEDGERJOURNALTRANS 43583730 39169656 KB 15857960 KB 22916496 KB 395200 KB クラスタ化インデックスで再構築した後: name rows reserved data index_size unused LEDGERJOURNALTRANS 43583730 29076736 KB 5867048 KB 22880144 KB 329544 KB 再構築のためのTSQL: USE [DAX5TEST] GO ALTER INDEX [I_212RECID] ON [dbo].[LEDGERJOURNALTRANS] REBUILD …

2
セカンダリデータファイルを削除しています。DBCC SHRINKFILE:作業テーブルページであるため、ページを移動できませんでした
に対して作成したセカンダリデータファイル(.ndf)が多すぎますtempdb。余分なファイルを削除するには、ファイルを空にする必要があります(コンテンツは他のファイルに移動されます)。 DBCC SHRINKFILE('tempdbfile8', EMPTYFILE); 次にファイルを削除します。 ALTER DATABASE tempdb REMOVE FILE tempdbfile8; しかし、EMPTYFILEコマンドはエラーを返します: DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page. Msg 2555, Level 16, State 1, Line 2 Cannot move all contents of file "tempdbfile8" to other places to complete the emptyfile operation. …

1
MySqlDumpのDISABLE KEYSはインポートに影響しません
Inno-Tablesでのインポート速度に関する私の前の質問のフォローアップがあります(驚き!)。 シナリオ 私は妥当な時間内にローカルの開発用マシンにいくつかのbig *データベースダンプをインポートしようとしました。KEYテーブルに接続されている多くのがボトルネックになっていますが、それでもライブシステムにとって重要です。 上記の質問をした後の私のアプローチはKEY ...、ダンプからステートメントを削除し、キーをインポートして再度追加することでした。 しかし、現在のダンプを編集してローカルにインポートすることがよくあり、これらの面白い "コメント"に遭遇しました(- disable/enable keys行)。 -- -- Dumping data for table `monster` -- LOCK TABLES `monster` WRITE; /*!40000 ALTER TABLE `monster` DISABLE KEYS */; INSERT … INSERT … INSERT /*!40000 ALTER TABLE `monster` ENABLE KEYS */; UNLOCK TABLES; しかし、実際にはこれらの「コメント」は条件付きのMySql-Statementsです それは私にとってはニュースでしたが、出力フォームを考えると、mysql --versionすべてが私には問題なく見えます。 mysql Ver 14.14 Distrib …

2
行の見積もりが大幅に不正確であるため、フルテキスト検索が遅い
このデータベースに対するフルテキストクエリ(RT(リクエストトラッカー)チケットを格納する)は、実行に非常に長い時間がかかるようです。添付ファイルテーブル(フルテキストデータを含む)は約15GBです。 データベーススキーマは次のとおりで、約200万行です。 rt4 =#\ d +添付ファイル テーブル "public.attachments" コラム| タイプ| 修飾子| ストレージ| 説明文 ----------------- + ----------------------------- +- -------------------------------------------------- ------ + ---------- + ------------- id | 整数| nullではないデフォルトのnextval( 'attachments_id_seq' :: regclass)| プレーン| transactionid | 整数| nullではない| プレーン| 親| 整数| nullではないデフォルト0 | プレーン| メッセージID | キャラクター変化(160)| | 拡張| 件名| 文字の変化(255)| | 拡張| …

2
MySQL:左外部結合と内部結合のどちらが良い結合か
それらすべてが同じ結果を提供する場合、どの結合がより良いパフォーマンスを発揮しますか?たとえば、2つのテーブルemployees(emp_id,name, address, designation, age, sex)とがありwork_log(emp_id,date,hours_wored)ます。いくつかの具体的な結果を得るために、両方のinner joinとleft join同じ結果になります。しかし、私はまだこの疑問だけに限定されない疑問をいくつか抱えています。 同じ結合の場合、同じ結果値の場合にどちらが優先されるのでしょうか。 結合を適用するときに考慮しなければならない他の要素は何ですか? 内部結合とクロス結合の間に関係はありますか?

2
Parallel Scalar UDFのサポートは妥当な機能リクエストですか?
スカラーUDFが全体的なシリアルプランを強制することはかなりよく文書化されています。 関数の並列実行 UDFを計算する必要があるパイプラインのポイントに入る行の数が多い場合、エンジンがそれらをプロセッサー間で単に分散できないのはなぜですか?UDF内に状態がない場合、順序は関係ありません。 UDFがブラックボックスであるため、カーソルを使用する必要があるという主張があります。反復間で一部の状態が維持されている場合、SP内でユーザーカーソルを並列化できませんが、それ以外の場合は並列化可能であるように見えます。 エンジンがUDF計算ステージだけでなく、全体の計画をシリアルにする理由を説明するための追加のポイント。 並列UDFのサポートは、要求するのに妥当な機能ですか?

5
INSERT_IDENTITYを使用して、selectに複数の関連テーブルに挿入します
シーンを設定してみましょう。私は、3つのテーブルを持っている(Table1、Table2およびDataTable)、私はに挿入するTable1と、Table2使用してDataTableソースとして。だから、内のすべての行のためにDataTable私の行をしたいTable1とTable2、そしてTable2挿入されている必要がありidから(PK)をTable1... 私がこれをするなら... INSERT INTO Table1 SELECT A, B, C FROM MyTable INSERT INTO Table2 SELECT IDENTITY_INSERT(), D, E, F FROM MyTable ID最後に挿入されたレコードのをに取得しTable1ます。 これを行う唯一の方法はCURSORor WHILEループですか?

2
外部キー制約違反の問題
私は3つの状況を特定しました。 登録のない学生。 登録はあるが成績がない学生。 登録と成績を持つ学生。 登録テーブルには、GPAを計算するトリガーがあります。学生に成績がある場合は、GPAテーブルにエントリを更新または挿入します。成績なし、GPAテーブルエントリなし。 登録のない生徒を削除できます(#1)。登録と成績(上記の#3)を持つ学生を削除できます。しかし、登録はあるが成績がない学生は削除できません(#2)。参照制約違反が発生します。 DELETEステートメントがREFERENCE制約「FK_dbo.GPA_dbo.Student_StudentID」と競合しました。データベース ""、テーブル "dbo.GPA"、列 'StudentID'で競合が発生しました。 登録がなく(GPAエントリもない)新しい生徒を削除できなかった場合、制約違反は理解できますが、その生徒を削除できます。登録がなく、成績もない(それでもGPAエントリがない)学生は削除できません。 トリガーにパッチを適用したので、次に進むことができます。これで、登録がある場合、トリガーは何があってもGPAテーブルに挿入します。しかし、私は根本的な問題を理解していません。説明をいただければ幸いです。 それが価値があるもののために: Visual Studio 2013 Professional。 IISエクスプレス(VS2013の内部)。 EntityFramework 6.1.1を使用するASP.NET Webアプリ。 MS SQL Server 2014 Enterprise。 GPA.Valueはnull可能です。 Enrollment.GradeIDはnull可能です。 これはデータベースのスニペットです: - 編集 - テーブルはすべてEntityFrameworkによって作成され、SQL Server Management Studioを使用して作成しました。 次に、制約付きのテーブル作成ステートメントを示します。 GPA テーブル: CREATE TABLE [dbo].[GPA]( [StudentID] [int] NOT NULL, [Value] [float] NULL, CONSTRAINT …

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