データベース管理者

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


5
SQL Server CASEステートメントはすべての条件を評価するか、最初のTRUE条件で終了しますか?
SQL Server(具体的には2008または2012)CASEステートメントはすべてのWHEN条件WHENを評価しますか、またはtrueと評価される句を見つけると終了しますか?条件のセット全体を通過する場合、真と評価された最後の条件が真と評価された最初の条件が上書きしたことを意味しますか?例えば: SELECT CASE WHEN 1+1 = 2 THEN'YES' WHEN 1+1 = 3 THEN 'NO' WHEN 1+1 = 2 THEN 'NO' END 最後のwhen条件により「NO」と評価されるはずですが、結果は「YES」です。最初のTRUE条件が見つかると終了するようです。誰かがこれが事実であるかどうか確認してください。
44 sql-server  t-sql  case 

4
SQL Server Management Studioをローカルにインストールできますか?
デスクトップにSQL Server Management Studioをインストールして、SQL Server 2012インスタンスのデータベースにアクセスできますか? その場合、インストーラーはどこにありますか?Google検索は「エクスプレス」バージョンのみを返しますが、完全なSQL Server Management Studioを探しています。

4
個々のクエリは結合よりも高速ですか?
概念的な質問:個々のクエリは結合よりも高速ですか、またはクライアント側で必要なすべての情報を1つの SELECTステートメントに絞り込もうとするか、便利だと思われるだけ使用する必要がありますか? TL; DR:結合されたクエリに個々のクエリを実行するよりも時間がかかる場合、これは私のせいですか、これは予想されることですか? まず、データベースに精通していないので、私だけかもしれませんが、複数のテーブルから情報を取得する必要がある場合、個々のテーブルで複数のクエリを使用してこの情報を取得する方が「多くの場合」高速であることに気付きました単純な内部結合を含む)、1つのクエリですべてのデータを取得できる(複雑な)結合クエリを作成しようとするクライアント側でデータをパッチします。 私は非常に単純な例を1つまとめようとしました。 SQLフィドル スキーマのセットアップ: CREATE TABLE MASTER ( ID INT NOT NULL , NAME VARCHAR2(42 CHAR) NOT NULL , CONSTRAINT PK_MASTER PRIMARY KEY (ID) ); CREATE TABLE DATA ( ID INT NOT NULL , MASTER_ID INT NOT NULL , VALUE NUMBER , CONSTRAINT PK_DATA PRIMARY KEY …

4
ストアドプロシージャの単体テスト
私はこれをかなり長い間考えてきました。 基本的な質問は、ストアドプロシージャを単体テストする方法ですか? 私は、古典的な意味で関数のユニットテストを比較的簡単に設定できることを知っています(つまり、ゼロ個以上の引数を取得して値を返します)。しかし、行をどこかに挿入し、挿入の前後にいくつかのトリガーを使用して、一見単純な手順の実際の例を考慮すると、「ユニット」の境界を定義することさえ非常に困難です。INSERT自分自身だけをテストする必要がありますか?それはかなり簡単です、私は思う-比較的低い値で。イベントチェーン全体の結果をテストする必要がありますか?これが単体テストであるかどうかという質問とは別に、適切なテストを設計することは、多くの追加の疑問符が途中で発生する非常に骨の折れる仕事です。 そして、常にデータが変化するという問題が生じます。UPDATE数行以上の影響がある場合、影響を受ける可能性のあるすべての行を何らかの方法でテストケースに含める必要があります。DELETEsなどに関するさらなる困難など。 それでは、ストアドプロシージャをどのように単体テストしますか?完全に絶望的な複雑さの限界がありますか?メンテナンスにはどのようなリソースが必要ですか? 編集 AlexKuznetsovの答えに基づくもう1つの小さな質問:または、それが完全に役に立たないという閾値がありますか?

3
SSDを使用する場合、DB設計のクラスター化インデックスの概念は意味がありますか?
SQLサーバーのデータスキーマと後続のクエリ、Sproc、ビューなどを設計するとき、クラスター化インデックスの概念とディスク上のデータの順序は、SSDプラットフォームに明示的に展開されるように設計されたDB設計について考慮する必要がありますか? http://msdn.microsoft.com/en-us/library/aa933131(v=sql.80).aspx 「クラスター化インデックスは、テーブル内のデータの物理的な順序を決定します。」 物理ディスクプラットフォームでは、「シーケンシャル」行を取得するためのデータの物理スキャンは、テーブルをシークするよりもパフォーマンスが高いため、これらを考慮する設計は理にかなっています。 SSDプラットフォームでは、すべてのデータ読み取りアクセスで同一のシークが使用されます。「物理的順序」の概念はなく、データの読み取りは、ビットが同じシリコンに格納されるという意味で「シーケンシャル」ではありません。 それでは、アプリケーションデータベースを設計する過程で、クラスタ化インデックスの考慮事項はこのプラットフォームに関連していますか? 私の最初の考えは、「順序付けられたデータ」の概念がSSDストレージとシーク/リトライバルの最適化に適用されないためではないということです。 編集:私はSQL Server がそれを作成することを知っています、私はそれが設計/最適化中にそれを考えることが理にかなっているかどうかについて哲学的です。

4
作成されたユーザーは、許可なしでPostgreSQLのすべてのデータベースにアクセスできます
PostgreSQLのセットアップに関して何かが欠けているに違いありません。私がやりたいのは、特定のユーザーが指定したデータベースにのみアクセスできるように、互いに分離された複数のデータベースとユーザーを作成することです。しかし、私が判断できることから、作成されたユーザーは、特定の許可が与えられなくてもすべてのデータベースにアクセスできます。 Ubuntu Server 12.04で行うことは次のとおりです。 apt-get postgresqlをインストール sudo -u postgres createuser -DRSP mike1(新しいユーザーのパスワードの指定) sudo -u postgres createdb data1 psql -h localhost -U mike1 data1(ログインするユーザーmike1のパスワードの指定) 新しいユーザー「mike1」は、データベース「data1」に接続してテーブルなどを作成しても問題ないようです。また、これは、GRANTコマンドをまったく実行せずに(および「data1」の所有者は「postgres手順3)の所有者。これは実際にどのように機能するはずですか? 私がやりたいのは、mike1にdata1へのフルアクセスを許可してから、これをより多くのユーザーとデータベースに対して繰り返し、ユーザーが選択した1つ(またはおそらく複数)のデータベースにのみアクセスできるようにすることです。

7
データベースにメールアドレスを保存するデータ型は何ですか?
254文字の電子メールアドレスが有効であることは理解していますが、調査した実装では、varchar(60)からvarchar(80)または同等のものを使用する傾向があります。例:このSQL Serverの推奨事項では、varchar(80)またはこのOracleの例を使用しています 最大254文字の最大文字数を使用しない理由はありますか?定義上、varcharはデータを保持するために必要なだけのストレージを使用しませんか? 非常に多くの実装で使用可能な254文字よりも少ない文字を使用する、パフォーマンスへの重要な意味/トレードオフがありますか?


9
データベースで削除をどのように処理する必要がありますか?
ユーザーが気を変えて、削除されたレコードを回復できるように、Webアプリケーションに「削除解除」機能を実装したいと思います。これを実装する方法についての考えは?私が検討したいくつかのオプションは、実際に問題のレコードを削除し、別の監査テーブルに変更を保存するか、レコードを削除せず、ブールの「deleted」列を使用して削除済みとしてマークすることです。後者のソリューションでは、通常の状況で「削除された」レコードを無視するために追加のアプリケーションロジックが必要になりますが、アプリケーション側でレコードの回復を実装するのがはるかに簡単になります。

14
ListAggの重複を排除する(Oracle)
Oracle 11.2より前は、カスタム集計関数を使用して列を行に連結していました。11.2 LISTAGG関数を追加したので、代わりにそれを使用しようとしています。私の問題は、結果の重複を排除する必要があり、それができないようだということです。 以下に例を示します。 CREATE TABLE ListAggTest AS ( SELECT rownum Num1, DECODE(rownum,1,'2',to_char(rownum)) Num2 FROM dual CONNECT BY rownum<=6 ); SELECT * FROM ListAggTest; NUM1 NUM2 ---------- --------------------- 1 2 2 2 << Duplicate 2 3 3 4 4 5 5 6 6 私が見たいのはこれです: NUM1 NUM2S ---------- -------------------- 1 2-3-4-5-6 …

3
UbuntuでMySQLテーブル名の大文字と小文字を区別しないようにするにはどうすればよいですか?
Ubuntu 13.10とMySQL 5.6を使用していますが、デフォルトではUbuntu(およびその他の* nix環境)でデータベース名とテーブル名の大文字と小文字が区別されることを知っています。 次に、MySQL をUbuntuで大文字と小文字を区別しないで動作させたいと思います。 出来ますか?はいの場合、どうすればいいですか?

3
ユーザーにスーパー特権を付与する方法は?
ユーザーを作成し、user1に特権を付与しました。 `grant all privileges on db1.* to user1@'%' with grant option; mysqlワークベンチを使用して、データベースにダンプをインポートしています。データベースdb1にダンプをインポートしているときに、次のエラーが発生します ERROR 1227 (42000) at line 49: Access denied; you need (at least one of) the SUPER privilege(s) for this operation そのダンプでは、すべてのテーブルは正常にインポートされますが、データベースへのルーチンのインポート中にエラーが発生します。特権に何か問題がありますか、私はuser1に与えました。ご意見をお聞かせください。

3
特定のデータベースとユーザーのsearch_pathは何ですか?
私は現在search_pathを見ることができます: show search_path ; そして、私search_pathは現在のセッションのために設定することができます: set search_path = "$user", public, postgis; 同様に、search_path特定のデータベースのを次のように永続的に設定できます。 alter database mydb set search_path = "$user", public, postgis ; そして、私はsearch_path特定の役割(ユーザー)に永久的に設定することができます: alter role johnny set search_path = "$user", public, postgis ; しかし、それらを変更する前に、データベースとロールの設定が(に関してsearch_path)であるかどうかを判断する方法を知りたいですか?

6
1つのSQLサーバーに配置できるデータベースの数に制限はありますか?
私は、各顧客に独自のデータベースを提供することを計画しているSaaSシステムをセットアップしています。システムは既に設定されているため、負荷が大きくなりすぎた場合に追加のサーバーに簡単にスケールアウトできます。数千、または数万の顧客を獲得したいと考えています。 ご質問 1つのSQL Serverで使用できる/する必要があるマイクロデータベースの数に実際的な制限はありますか? サーバーのパフォーマンスに影響はありますか? それぞれ100 MBのデータベースを10,000個、または1 TBのデータベースを1つ持つ方が良いでしょうか? 追加情報 「マイクロデータベース」と言うとき、「マイクロ」という意味ではありません。私たちは数千の顧客を対象にしているので、個々のデータベースは合計データストレージの1000分の1以下になります。実際には、取得する使用量に応じて、各データベースは100MB程度になります。 10,000個のデータベースを使用する主な理由は、スケーラビリティのためです。事実、システムのV1には1つのデータベースがあり、DBが負荷のかかったときに不快な瞬間がありました。 CPU、メモリ、I / Oに負担をかけていました-上記のすべて。これらの問題を修正したにもかかわらず、ある時点で、世界で最高のインデックス作成を行っていても、望みどおりに成功した場合、すべてのデータを1つの大きなホンキンに入れることはできないことに気付きました'データベース。したがって、V2ではシャーディングを行っているため、複数のDBサーバー間で負荷を分散できます。 昨年、このシャードソリューションの開発に費やしました。サーバーごとに1つのライセンスですが、AzureでVMを使用しているので、とにかく面倒を見てくれます。疑問が生じた理由は、以前は大規模な機関にのみ提供し、各機関を独自に設定していたためです。私たちの次のビジネスは、ブラウザを持っている人なら誰でもサインアップして自分のデータベースを作成できるセルフサービスモデルです。彼らのデータベースは、大規模な機関よりもはるかに小さく、はるかに多くなります。 Azure SQL Database Elastic Poolsを試しました。パフォーマンスは非常に残念でした。そのため、通常のVMに切り替えました。

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