データベース管理者

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

2
mysqlがクエリによる注文に間違ったインデックスを使用するのはなぜですか?
以下は、約10,000,000行のデータを持つ私のテーブルです CREATE TABLE `votes` ( `subject_name` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `subject_id` int(11) NOT NULL, `voter_id` int(11) NOT NULL, `rate` int(11) NOT NULL, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`subject_name`,`subject_id`,`voter_id`), KEY `IDX_518B7ACFEBB4B8AD` (`voter_id`), KEY `subject_timestamp` (`subject_name`,`subject_id`,`updated_at`), KEY `voter_timestamp` (`voter_id`,`updated_at`), CONSTRAINT `FK_518B7ACFEBB4B8AD` FOREIGN KEY (`voter_id`) REFERENCES `users` (`id`) ) …

3
同じテーブルに複数回参加する方法は?
「hierarchy_table」と「name_table」の2つのテーブルがあります。 階層テーブルには、複数の親と子を持つオブジェクトが含まれています。親と子はそれぞれIDで参照されます。 | object_id | parent_id_1 | parent_id_2 | child_id_1 | child_id_2 | ----------------------------------------------------------------------------- | 1234 | 9999 | 9567 | 5555 | 5556 | ----------------------------------------------------------------------------- hierarchy_tableの各オブジェクトIDは、name_tableにエントリを持っています。 | name_id | name | -------------------------- | 1234 | ABCD | -------------------------- | 9999 | ZYXW | -------------------------- | ... hierarchy_tableの各IDをname_tableに複数回結合して、すべての名前が入力された結果を得るにはどうすればよいですか? このような: | …

3
SUM(列)の合計を計算します
特定のアイテムの数量(itemid)と製品の日付コード(proddte)を合計するこのコードがあります。 select sum(qty), itemid, proddte from testtable where .... group by itemid, proddte 私がやりたいのは、にqty関係なくすべての合計を取得することですitemid/proddte。私が試してみました: select sum(qty), itemid, proddte, sum(qty) over() as grandtotal from testtable where .... group by itemid, proddte しかし、それは私も持っていなければならないと言うqtyにgroup by句。そうした場合、結果は期待した結果とは異なります。 すべての行が同じ値で、個別の列として表される必要はありません。全体の合計を表示できる限り、どのような表現でも受け入れられます。
9 sql-server  sum 

1
インデックス列の順序のWHERE-JOIN-ORDER-(SELECT)ルールは間違っていますか?
より大きなクエリの一部であるこの(サブ)クエリを改善しようとしています。 select SUM(isnull(IP.Q, 0)) as Q, IP.OPID from IP inner join I on I.ID = IP.IID where IP.Deleted=0 and (I.Status > 0 AND I.Status <= 19) group by IP.OPID Sentry Plan Explorerは、上記のクエリによって実行された、テーブルdbo。[I]の比較的コストのかかるキールックアップを指摘しました。 テーブルdbo.I CREATE TABLE [dbo].[I] ( [ID] UNIQUEIDENTIFIER NOT NULL, [OID] UNIQUEIDENTIFIER NOT NULL, [] UNIQUEIDENTIFIER NOT NULL, [] …

4
迷惑なMySql更新コンソールを無効にする方法
私はmysql 5.7をインストールし、時々(数日に1回)更新を探します(理解しています)。コンソールウィンドウが数秒間開いてから消えます。今回は映画を見ていて、このコンソールがプレイヤーの上にあります。それは本当に迷惑です、なぜMySqlはこのユーザーフレンドリーでない方法で更新していますか?サイレントモードで実行するように構成できますか?
9 mysql  windows 

1
MySQL->テーブルをループし、各エントリでストアドプロシージャを実行します
私は「本」(子供向けの短編小説)のデータベースを持っています。本の各単語の単語数を知ることは非常に有益です。 私は各単語の単語数を取得する方法を理解しました: SELECT SUM ( ROUND ( (LENGTH(pageText) - LENGTH (REPLACE (pageText, "Word", ""))) /LENGTH("Word") ) ) FROM pages WHERE bookID = id; これは単語を数えるのに素晴らしい働きをします。しかし、それは私が各本を読み、各単語を取り出し、その関数を実行する必要があります(私はそれをストアドプロシージャとして保存しています)。 重複のない、各単語を含むテーブルがあります。 私の質問:ストアドプロシージャを使用してWordsテーブルで何らかの "for each"ループを実行する方法はありますか? すなわち。ストアドプロシージャに書籍IDと単語を渡して、結果を記録します。すべての本のために、すべての言葉を行う。したがって、多くの手動時間を節約できます...これは私がDB側からでも行う必要があることですか?代わりにPHPで試す必要がありますか? 正直なところ、どんな入力でも大歓迎です!

2
配列integer []:テーブル内のすべての個別の値を取得してカウントする方法は?
SQL(PostgreSQL)はあまり得意ではありません。これが私がやりたいことです: テーブルとフィールドがあります: id SERIAL inet INET ports integer[] id | inet | ports ----+------------+------------ 2 | 1.2.2.1 | {80} 1 | 1.2.3.4 | {80,12} ... どうやって このテーブルで使用されているすべての「ポート」値を取得します:80、12 特定のポートにあるinetアドレスの数を数えます: このような: port | count --------+------------ 12 | 1 80 | 2 ... 誰かがDjangoバージョンを探している場合: class Unnest(Func): function = 'UNNEST' Model.objects \ .annotate(port=Unnest('ports', distinct=True)) …

2
データベースのテーブル膨張とは何ですか?
誰かがデータベースの膨らみの意味を説明できますか?たとえば、インデックスが肥大化しているとはどういう意味ですか。私はそれを探してみましたが、膨満が何であるか、何が原因であるのか、何が原因であるのかについての説明はありません。

2
pgAdminのカーソル位置でステートメントを実行するキーボードショートカット
MySQL Workbenchでは、キーボードショートカット+ を使用して、カーソルでステートメントを実行できます(セミコロンで区切られています)。CtrlENTER pgAdminに同様のショートカットはありますか? 1行だけに及ぶSQLクエリの場合、Dragon NaturallySpeakingで音声コマンドを使用します。 Sub Main SendKeys "{End}" Wait(0.3) SendKeys "+{Home}" Wait(0.3) SendKeys "{F5}" End Sub しかし、複数行にわたるSQLクエリのソリューションはありません。

2
DynamoDB-複数の範囲キー
範囲キーとして複数のフィールドを持つことは可能ですか? 各行が一意に識別されるテーブルがあるとしましょう <A,B,C> ------------------------------- A | B | C | D | E | ------------------------------- A主hashキーはどこですか そして私が欲しいBとCプライマリにrangeキー。 DynamoDBの主キーとして3つ以上のフィールドを持つにはどうすればよいですか?

1
演算子のハッシュ一致内部結合を削除することによるクエリパフォーマンスの向上
以下のこの質問の内容を自分の状況に適用しようとしていますが、可能であれば、演算子Hash Match(Inner Join)をどのようにして取り除くことができるのか、少し混乱しています。 SQL Serverクエリのパフォーマンス-ハッシュマッチ(内部結合)の必要性の排除 私は10%の費用に気づき、それを減らすことができるかどうか疑問に思っていました。以下のクエリプランを参照してください。 この作業は、今日調整しなければならなかったクエリサッドから来ています。 SELECT c.AccountCode, MIN(d.CustomerSID) FROM Stage.Customer c INNER JOIN Dimensions.Customer d ON c.Email = d.Email OR ( c.HomePostCode = d.HomePostCode AND c.StrSurname = d.strSurname ) GROUP BY c.AccountCode これらのインデックスを追加した後: --------------------------------------------------------------------- -- Create the indexes --------------------------------------------------------------------- CREATE NONCLUSTERED INDEX IDX_Stage_Customer_HOME_SURNAME_INCL ON Stage.Customer(HomePostCode ,strSurname) INCLUDE (AccountCode) …

2
主キーが含まれている場合、複合インデックスを一意としてマークする必要がありますか?
主キーを持ついくつかのテーブルがあるとします。例: CREATE TABLE Customers ( CustomerID int NOT NULL PRIMARY KEY, FirstName nvarchar(50), LastName nvarchar(50), Address nvarchar(200), Email nvarchar(260) --... ) に一意の主キーがありCustomerIDます。 伝統的に私はいくつかの追加のカバーするインデックスが必要になるかもしれません。たとえば、CustomerIDまたはのいずれかでユーザーをすばやく見つけるにはEmail: CREATE INDEX IX_Customers_CustomerIDEmail ON Customers ( CustomerID, Email ) そして、これらは私が何十年もの間作成してきた種類のインデックスです。 一意である必要はありませんが、実際には インデックス自体は、テーブルスキャンを回避するために存在します。これは、パフォーマンスを向上させるためのカバリングインデックスです(一意性を強制するための制約としてインデックスはありません)。 今日私はちょっとした情報を思い出しました-SQL Serverは次の事実を利用できます: 列に外部キー制約があります 列には一意のインデックスがあります 制約は信頼されています クエリの実行を最適化するのに役立ちます。実際、SQL Serverインデックスデザインガイドから: データが一意であり、一意性を適用したい場合は、列の同じ組み合わせで一意でないインデックスの代わりに一意のインデックスを作成すると、クエリオプティマイザーに追加情報が提供され、より効率的な実行プランを作成できます。この場合は、一意のインデックスを作成すること(できればUNIQUE制約を作成すること)をお勧めします。 私の複数列インデックスに主キーが含まれているとすると、この複合インデックスは事実上一意になります。挿入や更新のたびにSQL Serverで強制する必要があるのは、特に制約ではありません。しかし、実際には、この非クラスター化インデックスは一意です。 このデファクトユニークインデックスを実際にユニークであるとマークすることに何か利点はありますか? CREATE UNIQUE INDEX IX_Customers_CustomerIDEmail …

4
テーブルごとにデータとディスク使用の内訳を表示
SQL Server 2008 R2データベースをいくつかの展開されたプログラムで使用しています。 質問:データベース内のすべてのテーブルについて、各テーブルが消費する領域を表示し、論理領域とディスク領域を区別する簡単な方法はありますか? SSMS(Management Studio)を使用している場合、データベースに表示されるストレージプロパティは167 MBであり、3 MBが「利用可能」です(約適切なサイズですが、3 MBが利用可能かどうか心配です-これは心配する限界です) 、十分なディスク容量があることを知っているとしたら?) 各テーブルにドリルダウンできますが、それを行うには永遠にかかります。 独自のクエリを記述してテストできることはわかっていますが、これを行う簡単な(組み込み?)方法が既にあるかどうかを知りたいです。

1
PostgreSQLでのシーケンスの圧縮
私が持っているid serial PRIMARY KEYPostgreSQLのテーブルの列を。id対応する行を削除したため、多くのが欠落しています。 ここで、シーケンスを再起動idし、元のid順序が維持されるようにs を再割り当てすることで、テーブルを「圧縮」したいと思います。出来ますか? 例: 今: id | data ----+------- 1 | hello 2 | world 4 | foo 5 | bar 後: id | data ----+------- 1 | hello 2 | world 3 | foo 4 | bar StackOverflowの回答で提案されたものを試しましたが、うまくいきませんでした: # alter sequence t_id_seq restart; ALTER SEQUENCE # …

1
I / Oはデータベースでフリーズされ、I / Oは完全なバックアップのログで毎日データベースで再開されました
毎日のように、ログファイルにメッセージが表示されたと言いたいです。 まず、I / Oがデータベース(DatabaseName)でフリーズしましたというメッセージがログに表示されます。メッセージは I / Oはデータベース(DatabaseName)で凍結されています。ユーザーの操作は必要ありません。ただし、I / Oがすぐに再開されない場合は、バックアップをキャンセルできます。 そして、I / OはDatabase(DatabaseName)メッセージで再開されました。 データベース(DatabaseName)でI / Oが再開されました。ユーザーの操作は必要ありません。 そして最後に、このようなメッセージでデータベースのバックアップが成功しました ユーザーの操作は必要ありません それは私の実稼働監査データベースであり、ソフトウェア環境を持つことは次のようなものです: Windows Server 2012 R2 SQL Server 2012 VMware Tools 私の運用データベース「復旧モデル」は「完全」復旧モデルです。そして、SQL ServerのどのログインIDから、メンテナンスプランバックアップがセットアップされました。これには、すべてのデータベースに対する「sysadmin」特権があります。 バックアップには、「メンテナンスプラン」バックアップを通じて、毎日午後4時のような特定のタイムスケジュールで設定されています。また、Always Backupはスケジュールされた間隔で正常に実行されました。 なぜそのような種類のログメッセージがスケジュールバックアップ時に生成されるのですか。この種のメッセージは、私の運用データベースのパフォーマンスに影響しますか?本番データベースの(バックアップ/復元)データの整合性に問題があります。 任意の提案をいただければ幸いです。

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