データベース管理者

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

3
LIMITで行数をCOUNTする方法は?
X行をキャッチしたいので、を設定しLIMIT Xます。しかし、行の総数も同時に数えるにはどうすればよいですか? 現在、私は2つの別々のクエリを使用してそうしています SELECT COUNT(*) FROM col WHERE CLAUSE SELECT * FROM col WHERE CLAUSE LIMIT X これを1つのクエリで行う方法はありますか? 編集:出力はcolセルと行数でなければなりません。実際、colセルを選択した後は、テーブルの上を歩いて数えるだけです。 最初の行は1行を返し、2番目のX行を返すため、これら2つのクエリをマージすることはできません。が存在する場合にmysqlに行数を返す関数があるかどうか、私は興味がありLIMITます。

2
postgresqlデータベースをサーバー間で移動する
自宅に数ギガバイトの(空間)データベースを作成しました。1台のコンピューターから私のコンピューターにそのままデータベース全体を移動したいと考えています。 何もファンシーではないので、仕事用のコンピューターに新しいpostgresql / postgis dbインスタンスを作成します。dbユーザーは、両方のコンピューターで同じ名前を持つ場合とそうでない場合があります。 出来ますか?何に注意すべきですか?どうすれば痛みをなくすことができますか? postgres v9.1.5とpostgis拡張を使用しています。Ubuntu12.04(カーネル3.2.0-31)

2
製品属性リストのデザインパターン
ウェブサイトの製品データベースの更新に取り組んでいます。MySQLに組み込まれていますが、これは一般的なデータベース設計パターンの問題です。 Supertype / Subtypeパターンへの切り替えを計画しています。現在/以前のデータベースは、主に単一のタイプの製品に関するデータを含む単一のテーブルです。私たちは、異なる製品を含めるために製品提供を拡大することを検討しています。 この新しいドラフトデザインは次のようになります。 Product product_[type] product_attribute_[name] ---------------- ---------------- ---------------------------- part_number (PK) part_number (FK) attributeId (PK) UPC specific_attr1 (FK) attribute_name price specific_attr2 (FK) ... ... 製品の属性表について質問があります。ここでのアイデアは、色:赤、緑、青、または材料:プラスチック、木材、クロム、アルミニウムなどの特定の属性のリストを持つことができる製品です。 このリストはテーブルに格納され、その属性項目の主キー(PK)は特定の製品テーブルで外部キー(FK)として使用されます。 (Martin Fowler氏の著書「Patterns of Enterprise Application Architecture」では、これを「外部キーマッピング」と呼んでいます) これにより、Webサイトインターフェースは、指定された属性タイプの属性のリストをプルし、ドロップダウン選択メニューまたはその他のUI要素にそれを吐き出すことができます。このリストは、属性値の「許可された」リストと考えることができます。 特定の製品をプルするときに発生する結合の数が多すぎるように見えます。すべての製品属性テーブルを製品に結合して、その属性のフィールドを取得できるようにする必要があります。一般的に、そのフィールドは、単にその名前の文字列(varchar)にすぎません。 この設計パターンでは、多数のテーブルが作成されるだけでなく、属性ごとにテーブルが作成されます。これに対抗する1つのアイデアは、すべての製品属性に対して「グラブバッグ」テーブルのようなものを作成することです。このようなもの: product_attribute ---------------- attributeId (PK) name field_name このようにすると、テーブルは次のようになります。 1 red color 2 blue color …

4
PostgreSQL 9の単一インスタンスのデータベースの最大数
マルチカスタマーアプリケーションの開発では、カスタマーごとに異なるデータベースを使用する予定です。しかし、1000以上の顧客(アプリケーション)になる可能性があります。 PostgreSQLは問題なく処理しますか? 誰かが似たようなことを試しましたか? 注:データベースごとに、それぞれ35個のテーブルがあり、平均として最大3000レコードです。

4
何が良い/速いですか?MySqlまたはFileSystem?
人のディレクトリであるWebサイトを想像してみましょう。それぞれの人にプロフィール写真と伝記があるかもしれません。 私はSQLクエリの方が優れていることを認めますが、一般的には何がより速く、より少ない処理能力を使用します。 ファイルが存在するかどうかを確認してから開くには、または MySqlをチェックして、略歴が存在するかどうかを確認し、表示します。 上記の場合、ファイルシステムはmysqlデータベースをスモークします。 データベースを読み取り専用の区切りテキストファイルにするとどうなりますか? この場合、何が速くなりますか? txtファイルにレコードが多すぎる場合、MySqlを使用する方がよい特定のポイントはありますか?

3
データベースサイズがパフォーマンスに与える影響:理論と現実
データベースのサイズはパフォーマンスに大きな影響を与えてはならないということはたくさんあります。テーブルのインデックスがメモリに収まる限り、データベースのパフォーマンスは維持されます。 しかし、現実は何ですか?データベースアーキテクチャが最適でない場合、インデックスがメモリに収まらず、冗長データが大量に存在する可能性があります。冗長データを削除するだけで大​​幅なメリットが得られますか?データベース内のデータの60〜80%が削除される可能性があると推定しています。 データベースのサイズを減らし、RAMを増やしてインデックスがメモリに収まるようにすると、パフォーマンスが大幅に向上し、システムを再設計するための数か月の余裕ができると思います。 データベースのサイズに基づいてパフォーマンスに影響を与えるIO、断片化、作業データセットなどの他の要因もありませんか?

3
インラインTVFとビューのパフォーマンス
ビューの代わりにインラインTVF(テーブル値関数)を使用しているデータベースがあります。たとえば、TVF [fnCarBrands]内で結合している[車のモデル]と[車のメーカー]という2つのテーブルがあるとします。 これらのTVFは他のTVFから呼び出され、さらに処理とレポートを行います。したがって、関数[fnCarBrands]を受け取り、テーブル[購入年]に結合して、関数[fnCarBrandHistory]を作成します。TVFのいくつかの層についても同様です。 インラインTVFは実際にはテーブルと他のTVFの単なる結合なので、おそらくビューを使用して同じ機能を取得できます。 このように記述されたインラインTVFのパフォーマンスは、ビューとどのように比較されますか?

1
TRUNCATE TABLEに非常に長い時間がかかる原因は何ですか?
MySQL5.5をマスター/スレーブレプリケーション(1マスター、2スレーブ)で実行しています。 週に1回実行して特定のテーブルを切り捨てるプロセスがあります。テーブルは大きくなく、数千のレコードしかありません。 何らかの理由で、TRUNCATE TABLEコマンドの実行に非常に長い時間がかかります(マスターとスレーブの両方で)。実行には約400Kミリ秒かかります!! スレーブで実行すると、マスターから遅れます。終了後TRUNCATE TABLE、すべてが正常に戻ります。 スレーブの1つはTRUNCATE TABLE専用スレーブであり、そのスレーブから読み取るプロセスがダウンしていたため、実行中に読み取りを受信しなかったことがわかっています。また、このスレーブでは、実行に同じ時間がかかりました。 これがテーブル構造です:http : //pastebin.com/qEQB4juR TRUNCATE TABLEをどのように高速化できるかについての考えはありますか?

3
孤立した## MS_PolicyEventProcessingLogin ##の原因は何ですか?
今朝、SQLログが次のメッセージでいっぱいになっていることに気付きました。 アクティブにprocの「[dboは] [sp_syspolicy_events_reader]。」は次のキュー「msdb.dbo.syspolicy_event_queue」出力で実行されている: 「校長『## MS_PolicyEventProcessingLogin ##』、このタイプの存在しないため、データベースプリンシパルとして実行できませんプリンシパルを偽装することはできません、またはあなたには許可がありません。 以下を実行するEXEC sp_change_users_login 'report'と、ログインが実際に孤立していることがわかりました。 このMSDNの投稿で推奨されているように、以下を実行することで修正できました。 EXEC sp_change_users_login 'Auto_Fix', '##MS_PolicyEventProcessingLogin##', NULL, 'fakepassword' しかし、問題は残っています:このプリンシパルがそもそも孤児になった原因は何でしょうか?グーグルで調べて調べたところ、他の人がこの問題を抱えていることがわかりましたが、原因の説明はまだわかりません。エラーが発生し始めた瞬間、私が気づいていることは何も起こりませんでした。 昨年の夏にサーバー全体をSANストレージモデルに移動しました。その移動中にすべて(msdbを含む)を復元しましたが、それは数か月前でした。数週間前よりも早くログに表示されないため、症状が現れたのは最近のことでした。

3
いつインデックスを削除して再作成する必要がありますか?
最初は1 TBで、毎月約20ギガバイト成長するデータウェアハウスを構築しています。 特定のテーブルについては、毎日ETLプロセスを行っており、他のテーブルについては毎週/毎月行っています。 テーブルへのデータインポートがある場合、インデックスを削除して再作成する必要がありますか? インデックスを削除して再作成するポイントはありますか、それとも自動的に更新されますか? 統計は自動的に更新されるように設定されています。 あなたの助けと指導を本当にありがとう。 私はこの天才的なスクリプトを得ました: SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' + CASE WHEN ps.avg_fragmentation_in_percent > 40 THEN 'REBUILD' ELSE 'REORGANIZE' END + CASE WHEN pc.partition_count > 1 THEN ' PARTITION = ' + …


1
InnoDBテーブルのOPTIMIZE TABLEを安全に強制終了できますか?
kill 警告に関するMySQLのドキュメント: 警告 テーブルに対するREPAIR TABLEor OPTIMIZE TABLE操作を強制終了すると、MyISAMテーブルが破損し、使用できなくなります。そのようなテーブルの読み取りまたは書き込みは、再度(中断することなく)最適化または修復するまで失敗します。 MyISAMについてです。 OPTIMIZE TABLEInnoDBテーブルに対して実行されているプロセスを強制終了することも危険ですか?

2
テーブルフィールドの組み合わせを介して一意のキーを使用する方法
次のsqlfiddleを見てください:http ://sqlfiddle.com/#!2/dacb5/1 CREATE TABLE contacts ( id int auto_increment primary key, name varchar(20), network_id int, network_contact_id int ); INSERT INTO contacts (name, network_id, network_contact_id) VALUES ('John', 4, 10), ('Alex', 4, 11), ('Bob', 4, 12), ('Jeff', 4, 45), ('Bill', 7, 11), ('Walter', 7, 45), ('Jessie', 7, 360) ; 連絡先の基本的な表があります。フィールドは、他のテーブルにリンクID番号が含まれています。network_idnetwork_contact_id INSERT IGNOREこのテーブルに対してクエリを実行できるようにしたいのですが、network_idとの組み合わせを、network_contact_id照合する一意のキーとして使用したいと考えています。 …

2
大規模なSQL Serverデータベースのバックアップ中にデータ更新操作を実行する
大規模な(数千万レコードの)データベースがあり、データベースの完全バックアップを実行します。 ただし、データベースは十分に大きいため、バックアップの実行前および実行中にトランザクションを開始できるだけでなく、バ​​ックアップの実行中および実行後にコミットすることもできます。 例えば: T0 = Transaction A start T1 = Full database backup start T2 = Transaction B start (will not deadlock with A) T3 = Transaction A commit/rollback (does not matter, does it?) T4 = Full database backup end T5 = Transaction B commit/rollback (again, does not matter, does …

2
REBUILD-クラスタ化インデックス、TABLE、またはその両方?
これに関する決定的なリソースをどこでも見つけるのに苦労しているので、グルがここで答えを出してくれるといいのですが。 列を追加する必要がある非常に大きなテーブルがあります。クラスタ化インデックスはかなり高度に断片化されておりALTER INDEX REBUILD、クリーンアップするために実行したいと思います。 また、通常はALTER TABLE REBUILD列を変更するときにも行います。これにより、その操作からのポインターまたは分割がクリーンアップされるためです。 クラスター化インデックス(基本的にはテーブル)について話しているので、両方を実行する必要がありますか? 私の疑いは、ALTER INDEX REBUILDクラスター化された意志が意志のすべてを更新するわけではないALTER TABLEことですがALTER TABLE、インデックスの断片化がクリーンアップされないことも心配です。

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