私はSQLを初めて使用しています。パフォーマンスに関する基本的な質問があります。私は私のユーザーに関する情報を格納するユーザデータベースを作成したいパフォーマンスのSQLデザイン
:
- 同上
- ログイン名で
- パスワード
- 本名
後、私がしたいです[Id]、[ログイン名]、[実名]のクエリをSELECT
に実行します。
このデータベースにはどのようなデザインが最適ですか、どのテーブルとキーを作成すればよいですか?
私はSQLを初めて使用しています。パフォーマンスに関する基本的な質問があります。私は私のユーザーに関する情報を格納するユーザデータベースを作成したいパフォーマンスのSQLデザイン
:
後、私がしたいです[Id]、[ログイン名]、[実名]のクエリをSELECT
に実行します。
このデータベースにはどのようなデザインが最適ですか、どのテーブルとキーを作成すればよいですか?
フィールドが4つの場合は、1つのテーブルのように見えます。主キーはID
、一意のインデックスはLoginName
です。あなたはパスワードを保存したくないかもしれませんが、ハッシュだけです。
クエリに応じて、異なるインデックスを作成します。さらに、ID
フィールドはまったく必要ないかもしれません。
更新: 特定の列にインデックスを作成すると、データベースはSQL文を最適化できます。ユーザーテーブルを考える:
USER
USER_ID BIGINT NOT NULL
LOGIN_ID VARCHAR(<size>) NOT NULL
PASSWORD VARCHAR(<size>) NOT NULL
NAME VARCHAR(<size>) NOT NULL
CONSTRAINT PK_USER PRIMARY KEY (USER_ID)
私は、自動的に、実際にデータベースが最適化されたルックアップテーブルを維持することを意味し、主キーにインデックスが作成されます知っているデータベースが、詳細についてはWikiPediaを参照してください。
CREATE INDEX I_USER_1 ON USER (LOGIN_ID asc)
上記インデックスがselect * from USER where LOGIN_ID='foo'
を最適化します:
は、今ではかなり一般的なユースケースであるLOGIN_ID
でユーザーを照会したい、と言う、私は推測、あなたは次のように別のインデックスを作成することができます。あなたは、
CREATE UNIQUE INDEX UI_USER_1 ON USER (LOGIN_ID asc)
あなたは、ユーザーの本当の名前(NAME
)のクエリを最適化したいので、もし、全体的な話だ:さらに、あなたはLOGIN_ID
Sを複製したくないと仮定して、代わりに一意のインデックスを作成することができますちょうど別のインデックス作成:ちょうど@homesに追加する
CREATE INDEX I_USER_2 ON USER (NAME asc)
「本名」の質問はどうですか?また、ログイン名のインデックスを作成しているときに、その場で何が起きているのか教えてください。 sqlは何をしていますか? –
をあなたが実行した後、クエリのこれらの種類のために最適化されたクエリの種類をうまくべきで答えます。たとえば、たくさんの書き込みをしていて、多くのインデックスを持つ読み込みがパフォーマンスの問題を引き起こす可能性がある場合はそうではありません。車のエンジンをチューニングするのと同じように、ドラッグストリップを素早く下って行くのか、それとも長距離走行のためにチューニングしていますか?
とにかくNAME列についても尋ねました。あなたがvarcharカラムでマッチングするつもりならば、FULLTEXTインデックスの使用を調査する価値があります。
http://msdn.microsoft.com/en-us/library/ms187317.aspx
これは、あなたが名前などのパーツを合わせるかもしれない名前に最適化された検索設定を行うことができます。@homesの答えによると、実際にはクエリを書くときのクエリと目的が何であるかによって異なります。
テーブルを作成し、SQL管理スタジオのようなクエリ実行プランをクエリに使用して、行の量やルックアップの種類にどのような影響があるかを確認する価値があります。
http://www.sql-server-performance.com/2006/query-execution-plan-analysis/
別の回答を参照する場合は、「上記の回答」を参照するよりもリンクする方が良いです(「@ homeの回答」と言う)。回答はお互いに相対的に移動し、あなたの上には別の回答が表示されます。 –
私はあなたが種類のそれを打つと思います - キーは、ログイン名と実際の名前にインデックスを追加し、(自動的にインデックスされます)同上だろう。あなたがするかもしれない1つの事は、本名とファーストネームに本名を壊すことです。 – Prescott