データベース管理者

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

3
セットからランダムな値を設定する
ランダムな値をデータベースに入れる必要がありますが、完全にランダム化されたテキスト(7hfg43d3など)にしたくありません。代わりに、自分で指定した値の1つをランダムに選択します。

3
LIMITを使用するとパフォーマンスが向上しますか?
以下について理解したい。 合計と順序付けによるグループと5つのテーブルの結合を例に挙げると、複雑なクエリがあるとします。 余談せるなど、クエリ自体例えばインデックスに任意の最適化を 使用して、任意の大幅なパフォーマンス上の利点はありますかLIMIT?LIMITを適用する前にすべてのクエリ(および結果)を処理する必要があると思います。そのため、LIMITを使用して結果のサブセットを取得すると、大幅に改善されますか?

5
DELETEステートメントがREFERENCE制約と競合しました
すべてのユーザーを削除しようとしていますが、エラーが発生します。 Msg 547, Level 16, State 0, Line 1 The DELETE statement conflicted with the REFERENCE constraint "FK_M02ArticlePersons_M06Persons". The conflict occurred in database "workdemo.no", table "dbo.M02ArticlePersons", column 'M06PersonId'. The statement has been terminated. クエリ: DELETE FROM [workdemo.no].[dbo].[M06Persons] WHERE ID > '13' GO 使用する必要on delete cascade;があるようですが、行き詰まっています。
11 sql-server  t-sql 

3
UNIONは遅いですが、両方のクエリは別々に高速です
ダンノ、これについて他に何をすべきか。開始列と停止列を持つ1つのテーブルがあり、開始と停止の両方で結合した結果を返したいと思います。また、2つのテーブルを明確に区別したいと考えています。これで、両方のクエリが別々に高速に実行されます。 SELECT UNIX_TIMESTAMP(CONVERT_TZ(start_dev, '+00:00', GetCarrierTimezone(a0.carrier_id))) AS alertStart, NULL AS alertStop, c0.name AS carrier_name, carrier_image, l0.Latitude, l0.Longitude FROM carriers AS c0 INNER JOIN start_stop AS a0 ON a0.carrier_id = c0.id INNER JOIN pcoarg AS l0 ON a0.startLogId = l0.id WHERE FIND_IN_SET(a0.carrier_id, '89467,1,64578,222625,45013') > 0 AND start_dev > '2013-03-11 11:46:48' AND start_dev …
11 mysql 

3
履歴/テンポラルテーブルのベストプラクティス
履歴を追跡したい特定のフィールドと、履歴を追跡したくない特定のフィールドを持つオブジェクトがあるとします。正規化の観点からは、次のスキーマで問題ありません。 CREATE TABLE MyObject AS ( MyObjectId INT IDENTITY NOT NULL PRIMARY KEY, MyObjectField1 VARCHAR(100) NOT NULL, MyObjectField2 VARCHAR(100) NOT NULL, MyObjectField3 VARCHAR(100) NOT NULL, MyObjectTrackedField1 VARCHAR(100) NOT NULL, MyObjectTrackedField2 VARCHAR(100) NOT NULL, MyObjectTrackedField3 VARCHAR(100) NOT NULL, ) CREATE TABLE MyObjectHistory AS ( MyObjectHistoryId INT IDENTITY NOT NULL PRIMARY KEY, …

1
DMV sys.dm_exec_query_statsのlast_worker_timeとlast_elapsed_timeの違いは何ですか?
DMV sys.dm_exec_query_statsのlast_worker_timeとlast_elapsed_timeの意味は何ですか?それらの違いは何ですか? クエリの下で起動したとき SELECT TOP 20 qs.last_worker_time, qs.last_worker_time/1000000 last_worker_time_in_S, qs.last_elapsed_time, qs.last_elapsed_time/1000000 last_elapsed_time_in_S FROM sys.dm_exec_query_stats qs order by qs.last_worker_time desc 以下のような結果になります。 私が気づいたのは、両方が等しいか、経過時間がワーカー時間よりも長いことです。両方の意味を理解したいので、パフォーマンスのチューニングにも役立ちます。

1
PostgreSQL Windowsサービスのファイルへのロギング
次のコマンドを実行するための代替手段が必要です。 C:\xxx\pgsql\bin\pg_ctl" -D "C:\xxx\pgsql\data" -l "C:\yyy\log\pgsql.log" start。 このようにして、サーバーが起動し、にログインしC:\yyy\log\pgsql.logます。ただし、サーバーをサービスとして登録しようとすると、ログオプションが使用できず、サーバーはイベントビューアにログを記録します。pg_ctlのドキュメントから: pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-S a [uto] | d [emand]] [-w] [-t秒] [-s] [-oオプション] サーバーにファイルへのログインを強制するにはどうすればよいですか?注:ワンクリックインストーラーを使用したくありません。解凍したバイナリで作業したいだけです。

6
データベース2の論理ページ(5:65424)をフェッチしようとして失敗しました
SqlExceptionストアドプロシージャを呼び出すと、次のようになります。 データベース2の論理ページ(5:65424)をフェッチしようとして失敗しました。これは、4899918190390149120ではなく、アロケーションユニット7349876362857938944に属しています。 System.Data.SqlClient.SqlExceptionが発生しました Message = "データベース2の論理ページ(5:65424)をフェッチしようとしましたが失敗しました。これは4899918190390149120ではなく、割り当てユニット7349876362857938944に属しています。 Source = " 。Net SqlClient Data Provider" ErrorCode = -2146232060 Class = 21 LineNumber = 257 Number = 605 Procedure = "ispDisplayCount" Server = "10.10.1.1" State = 3 この例外はどういう意味ですか?上記の問題に対する解決策はありますか? 上記のエラーで参照されているデータベースはtempdbを示していますが、メッセージ605を参照する同様のエラーは、以下の回答を使用して修正できます。 メッセージ605、レベル21、状態3、行1 データベース7の論理ページ(1:8687634)をフェッチしようとして失敗しました。これは、72057594052476928ではなく、割り当てユニット72057594364821504に属しています。

1
入力をいくつかの異なる文字列に制限する
こんにちは私はpostgreSQLで期待どおりに制約が機能していないようです。pgadmin内から、次のSQLクエリを実行します。 -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck"; ALTER TABLE "ComLog" ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes'); COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes'; 実行するとこれに変換されます。 -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck"; ALTER TABLE "ComLog" ADD CONSTRAINT "TypeCheck" CHECK …

3
1つのクエリで複数のカウントを行う方法は?
次のようなクエリでレコードを数えます SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%' SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%' SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%word%' カウントごとに、mysqlはテーブル全体をウォークスルーする必要があり、これは長いテーブルと多数のクエリがある場合の大きな問題です。 1つのクエリですべてのカウントを行う方法はあるのでしょうか。この場合、mysqlが各行をウォークスルーすると、すべてのカウントが処理されるため、テーブル全体を何度もスキャンする必要がありません。

2
mysqldumpからの詳細出力をログに記録する方法は?
通常、次のようなLinuxコマンドの詳細な出力を保存します。 # command > output.txt あなたのようなコマンドを使用する場合でもmysqldump、>オプションは、目的のファイルにデータベーステーブルのダンプを出力します。 # mysqldump --username=whatever --password=whatever -h localhost database > dump.sql -v(verbose)オプションをmysqldumpに追加すると、コマンドの実行内容に関するヘルプ情報が出力されます。>オプションを使用してデータベーステーブル情報をファイルに出力するため、この詳細出力をファイルに保存するにはどうすればよいですか? より具体的には、次のように1つのデータベースの出力を別のデータベースにダンプしています。 mysqldump -alv -h 123.123.123.123 --user=username --password=p@ssw0rd --add-drop-table databasename | mysql --user=username --password=p@ssw0rd -h localhost localdatabase 以下を試しましたが、最終的に出力ファイルが空でした mysqldump -alv -h 123.123.123.123 --user = username --password = p @ ssw0rd --add-drop-table databasename | mysql --user …

5
バックアップ後に復元されたユーザー権限->復元操作
いくつかのSQL Server 2008データベースを新しいdbサーバーに移動して、それらすべてを(.bakファイルに)バックアップし、これらのファイルを新しいボックスにコピーして復元しました(すべてSQL Management Studioを使用して行いました)。 すべて問題なく動作しましたが、古いRDBMSで引き続き動作するSQL Serverアカウントを使用して、どのデータベースにもログインできません。私のWindows認証ログインは、ついでに問題なく動作します。 ユーザーと権限はすべてシームレスに新しいデータベースサーバーに複製されるという考えがありましたが、どこかで問題が発生しているようです。コメント/提案/ヘルプの提供をお願いします;-)

3
大文字と小文字を区別するデータベースで大文字と小文字を区別しないLIKEを行う方法
私のベンダーでは、データウェアハウスデータベースで大文字と小文字を区別する必要がありますが、それに対して大文字と小文字を区別しないクエリを実行する必要があります。 大文字と小文字を区別するデータベースで、大文字と小文字を区別しないようにこれをどのように記述しますか? Where Name like '%hospitalist%'

1
「データベースの作成」コマンドでテーブルスペースを指定すると、PostgreSQLの権限エラーが発生するのはなぜですか?
デフォルトのテーブルスペースを明示的に指定せずにPostgreSQLでデータベースを作成すると、データベースは問題なく作成されます(pgsysユーザーとしてログインしています)。 postgres =>データベースrich1を作成します。 データベースを作成 postgres => \ l + データベースのリスト 名前| オーナー| エンコーディング| 照合| Ctype | アクセス権限| サイズ| テーブルスペース| 説明文 ----------- + ---------- + ---------- + ------------- +- ----------- + ------------------------------------- + ----------- + ------------ + ------------------------- ------------------- postgres | pgsys | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 7455 …

1
Postgresql:default_statistics_targetの値は実際に何を意味するのですか?
default_statistics_targetの値を増やすと、特に分析後にデータベースを高速化できます。 この記事を読むと、https://discuss.pivotal.io/hc/en-us/articles/201581033-default-statistics-target-Explained (...)簡単に言えば、このパラメータは、統計の収集方法を制御します。値1は、最も低い推定/正確な統計であり、値1000は、最も正確な統計です。明らかに、時間/リソースを消費します。 (CPU、メモリ等)/スペース。通常、デフォルト値は正確な計画を得るのに十分ですが、複雑なデータ分布がある場合や、列がクエリで頻繁に参照される場合、高い値を設定すると、テーブルのより良い統計を取得するのに役立つ可能性があります。オプティマイザを実行するためのより良い計画。 これは良い説明ですが、たとえばdefault_statistics_target = 1000を設定した場合、1000は実際には何を意味しますか?1000キロバイトの統計が生成されていますか?または多分それは分析されたテーブルの1000行ですか?多分それは1000列ですか?またはおそらく分析ごとに1000秒... だから私の質問は、この数が分析やクエリプランナーに本当に影響しているのですか?default_statistics_target = 1000は分析を実行するために100より多くの時間を取得し、1000はより良い統計を生成することを理解しています...
11 postgresql 

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