データベース管理者

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

6
テーブル内の任意のレコードの順序付け
データベースを使用する際の一般的なニーズは、レコードに順番にアクセスすることです。たとえば、ブログがある場合、ブログの投稿を任意の順序に並べ替えることができます。これらのエントリには多くの場合、多くの関係があります。そのため、リレーショナルデータベースは理にかなっているようです。 私が見た一般的な解決策は、整数列を追加することですorder: CREATE TABLE AS your_table (id, title, sort_order) AS VALUES (0, 'Lorem ipsum', 3), (1, 'Dolor sit', 2), (2, 'Amet, consect', 0), (3, 'Elit fusce', 1); 次に、行を並べ替えorderて適切な順序で並べます。 しかし、これは不器用なようです: レコード0を先頭に移動する場合は、すべてのレコードを並べ替える必要があります 真ん中に新しいレコードを挿入したい場合は、その後のすべてのレコードを並べ替える必要があります レコードを削除する場合は、それ以降のすべてのレコードを並べ替える必要があります 次のような状況は簡単に想像できます。 2つのレコードは同じです order orderレコード間にギャップがあります これらは、いくつかの理由でかなり簡単に発生する可能性があります。 これは、Joomlaなどのアプリケーションがとるアプローチです。 ここでのインターフェイスは悪いと主張し、人間が直接数字を編集する代わりに、矢印またはドラッグアンドドロップを使用する必要があります。おそらく正しいでしょう。しかし、舞台裏では、同じことが起こっています。 一部の人々は、「2.5」を使用して順序2と3のレコードの間にレコードを挿入できるように、10進数を使用して順序を格納することを提案しています。そして、それは少し助けにはなりますが、奇妙な小数(どこで止まりますか?2.75?2.875?2.8125?) 注文をテーブルに保存するより良い方法はありますか?

2
oracle-特定のテーブルへのアクセス権を持つユーザーをリストします
これは以前に尋ねられたと確信していますが、以下に関連する詳細を見つけることができないようです。 以下を行うことができる事前構築テーブルのようなものはありますか(dba_tab_privsを使用しましたが、制限されており、私のニーズをすべて満たしていない)、誰かが次の質問に答えるためのクエリを持っていませんか? 特定の役割が割り当てられているすべてのユーザーをリストしますか? ユーザーに与えられたすべての役割をリストしますか? ユーザーに与えられたすべての特権をリストしますか? 特定のロールがSELECTアクセスを許可するテーブルをリストしますか? ユーザーが選択できるすべてのテーブルをリストしますか? 特定のテーブルでSELECTできるすべてのユーザーをリストします(関連するロールの付与または直接付与(joe toableでのselectの付与))。このクエリの結果には、ユーザーがどのロールを介してこのアクセス権を持っているか、それが直接許可であったかどうかも表示されます。

3
テーブルのパーティション分割はどのように役立ちますか?
テーブルパーティションの長所と短所の概念をつかむのが困難です。8つのテーブルを持つプロジェクトの作業を開始しようとしていますが、そのうちの1つは1億8千万から2億6千万件のレコードを保持するメインデータテーブルになります。適切にインデックスが付けられたテーブルになるので、9〜13個のテーブルを作成する必要があるこの方法で、テーブルレコードを2,000万に制限することを考えています。 しかし、同じマシン(32GB RAM)に座っているため、パフォーマンスがどのように改善されるかについてはよくわかりません。 私はMySQLを使用しており、テーブルはMyISAMであり、大きなテーブルにはidフィールドにインデックスがあり、フルテキスト検索などの複雑さはありません。 また、テーブルのパーティション分割とデータベースのパーティション分割についても明らかにしてください。

3
実動テーブルへの列の追加
SQL Server 2008 R2の大規模な運用テーブルに列を追加する最良の方法は何ですか?オンラインのMicrosoftの本によると: ALTER TABLEで指定された変更はすぐに実装されます。変更がテーブル内の行の変更を必要とする場合、ALTER TABLEは行を更新します。ALTER TABLEは、テーブルのスキーマ変更ロックを取得して、最後に非常に短いSCH-Mロックを必要とするオンラインインデックス操作を除き、変更中に他の接続がテーブルのメタデータを参照しないようにします。 (http://msdn.microsoft.com/en-us/library/ms190273.aspx) 数百万行の大きなテーブルでは、これには時間がかかる場合があります。停止することが唯一の選択肢ですか?このような状況に対処する最善の方法は何ですか?

9
SQL ServerでFIZZBUZZテストを実行する最も効率的な方法は何ですか?
これは完全に話題ではないかもしれませんが、ここでは遅い日です。 FIZZ3でBUZZ均等に分割できる場合、5でFIZZBUZZ均等に分割できる場合、および均等に分割できる場合、単語を含む列で1から49の数字のリストを取得するより効率的な方法はありますか両方 3と5? 私の試みは(注意、これはあなたのプロシージャキャッシュを空にするので、プロダクションボックスで実行しないでください): DBCC FREEPROCCACHE GO /*VARIANT1*/ ;WITH t AS ( SELECT RowNum = ROW_NUMBER() OVER (ORDER BY o.object_id) FROM sys.objects o ) SELECT t.RowNum , CASE WHEN ((t.RowNum % 3) + (t.RowNum % 5)) = 0 THEN 'FIZZBUZZ' ELSE CASE WHEN t.RowNum % 3 = 0 THEN 'FIZZ' …
28 sql-server 

4
MySQL InnoDBクラッシュの事後分析
今朝、MySQLがクラッシュしました。 MySQLに含まれている標準のデータベースを除き、私が使用するものはすべてInnoDBです。 MySQLデーモンを再起動しようとしましたが、2回失敗しました。 その後、サーバー全体を再起動すると、MySQLが正しく起動し、それ以降は正常に機能しています。 初期クラッシュのmysqldログファイルには以下が含まれます。 120927 10:21:05 mysqld_safe Number of processes running now: 0 120927 10:21:06 mysqld_safe mysqld restarted 120927 10:21:12 [Note] Plugin 'FEDERATED' is disabled. 120927 10:21:12 InnoDB: The InnoDB memory heap is disabled 120927 10:21:12 InnoDB: Mutexes and rw_locks use GCC atomic builtins 120927 10:21:12 InnoDB: Compressed tables …

5
メモリを使い果たすことなく、多くの挿入を含む大きなスクリプトを実行するにはどうすればよいですか?
質問: selectステートメントから約45,000の挿入があるスクリプトがあります。実行しようとすると、メモリが不足していることを示すエラーメッセージが表示されます。このスクリプトを実行するにはどうすればよいですか? コンテキスト: クライアントが使用する別のアプリでアプリを快適に動作させるために、いくつかの新しいデータフィールドが追加されました。 現在のデータ項目をこれらの新しいフィールドの値にマッピングしたデータでいっぱいのクライアントからデータのスプレッドシートを取得しました。 ステートメントを挿入するためにスプレッドシートを変換しました。 ステートメントの一部のみを実行すると機能しますが、スクリプト全体は機能しません。 いいえ。タイプミスはありません。 別の方法がある場合は、このデータをロードする必要がありますので、お気軽に私を責め、知らせてください。

3
ビューにWHERE句を追加すると、ビューが最適化されますか?
ビューの内側または外側でビューをフィルタリングすると、違いが生じますか? たとえば、これら2つのクエリに違いはありますか? SELECT Id FROM MyTable WHERE SomeColumn = 1 または SELECT Id FROM MyView WHERE SomeColumn = 1 とMyView定義されます SELECT Id, SomeColumn FROM MyTable ソーステーブルがリンクサーバー上にある場合、答えは異なりますか? リンクサーバーから大きなテーブル(44mil行)を2回クエリし、結果の集計を取得する必要があるため、私は尋ねています。データにアクセスするために2つのビューを作成する必要があるかどうか(クエリごとに1つ)、または単一のビューと1つのWHERE句で処理できるかどうかを知りたいです。

4
別のテーブルからテーブルを更新する方法
1つのテーブルAには列(id、field_1、field_2)があり、別のテーブルBには列(id、field_2)があります ここで、テーブルBをAにマージします。つまり、テーブルAのfield_2をテーブルBの値に更新することを意味します。ところで、私はオラクルを使用しています ありがとう
28 oracle 

3
クラスタ化インデックス付きのテーブルへの効率的なINSERT
TRACKING_NUMBER列にクラスター化インデックスが設定されたテーブルに行を挿入するSQLステートメントがあります。 例えば: INSERT INTO TABL_NAME (TRACKING_NUMBER, COLB, COLC) SELECT TRACKING_NUMBER, COL_B, COL_C FROM STAGING_TABLE 私の質問は-クラスター化インデックス列のSELECTステートメントでORDER BY句を使用するのに役立ちますか、またはORDER BY句に必要な追加の並べ替えによってゲインが無効になりますか?

5
MySQLを適切に殺す方法は?
CPanelがインストールされたCentOS 64ビットを使用しています。 service mysql stop 周期を刻み続けるだけで、停止するようには見えません。ログには多くの情報が投稿されます。 130303 17:42:38 [Warning] /usr/sbin/mysqld: Forcing close of thread でerr.log、ファイル、私はこれらの多くを参照してください。 [Warning] /usr/sbin/mysqld: Forcing close of thread 以前は瞬時でした。なぜそれを行うのか、どのように修正するのか? 今私はしなければなりませんkillall -9 mysqlが、より良い方法はありますか? サーバーも非常にアクティブです。 これは設定の問題ですか?memroyの設定が高すぎますか? [mysqld] default-storage-engine=MyISAM local-infile=0 symbolic-links=0 skip-networking max_connections = 500 max_user_connections = 20 key_buffer = 512M myisam_sort_buffer_size = 64M join_buffer_size = 64M read_buffer_size = 12M …

2
SQLテキスト列を選択するときに長い行をラップする方法は?
長いテキスト列のあるテーブルから選択しています。長い行を最大行長に折り返したいです。 から: SELECT * FROM test; test_id | text --------+----------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris lorem に: test_id | text --------+----------------------------- 1 | Lorem ipsum dolor sit amet,+ | consectetur adipiscing elit+ | . Mauris lorem
28 postgresql 

4
運用中のデータベースでSQLプロファイラーを使用する
開発者として、私はSQLプロファイラーを頻繁に使用します。これは、コードが何をしているかを追跡し、パフォーマンスの問題を分析するのに適したデバッグツールです。 しかし、私は常に開発環境で非常に制御された方法でそれを使用してきました。 アプリケーションを起動し、特定の状態にします プロファイラーでトレースを開始する アプリケーションで特定のアクションシーケンスを実行する トレースを停止し、結果を調べます。 SQLプロファイラーは、実稼働環境で実際に使用できますか? 私の最初の懸念は、パフォーマンスが低下することです。 私の2番目の懸念は、本番環境であるため、興味深いアクション自体をトリガーしていないということです。プロファイラーを長時間実行したままにして、結果を分析する必要があります。結果セットは扱いにくくなりますか?(ディスク容量を取りすぎており、クエリが困難です)。 誰かが本番環境でSQLプロファイラーを使用していますか?


3
SQLで一度だけ書き込み、読み取り専用のデータベーステーブルを適用するにはどうすればよいですか?
それも可能ですか? 私のユースケースは元帳テーブルです。レコードが作成されたら、読み取り専用にする必要があります。つまり、誰もレコードを編集または削除できません。これは、元帳テーブルと、それと直接関係のあるテーブルにのみ適用されます。同じスキーマ内に、通常どおり更新/削除される他のテーブルがあります。 私の理解では、データの整合性のために、これらの種類の制約をデータベース層に適用する必要がありますが、これを行うためのクリーンで広く受け入れられている方法は見つかりませんアプリケーション層で? 理想は、変更される可能性があるため、使用されるDBプラットフォームにとらわれないように、プレーンSQLでそれを行う方法になりますが、私はそれが多すぎる場合、プラットフォームに依存するために、MySQLのフレーバーが推奨されます。 ありがとうございました!
28 mysql  constraint 

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