私のSQL(Server 2008)に関する低レベルの知識は限られており、現在DBAによって挑戦されています。説明させてください(私は私が正しいことを期待して明白な発言を述べましたが、何か問題を見つけた場合は教えてください)シナリオ:
人のための「裁判所命令」を保持するテーブルがあります。テーブル(名前:CourtOrder)を作成したとき、次のように作成しました。
CREATE TABLE dbo.CourtOrder
(
CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
PersonId INT NOT NULL,
+ around 20 other fields of different types.
)
次に、非効率的なインデックスを主キーに適用しました(効率を高めるため)。私の理由は、それが一意のフィールド(主キー)であり、主に選択目的のためにインデックス付けする必要があることです。Select from table where primary key = ...
次に、CLUSTEREDインデックスをPersonIdに適用しました。その理由は、作業の大部分が人の注文を得ているため、特定の人の注文を物理的にグループ化するためでした。そう、select from mytable where personId = ...
私は今これに引っ張られています。クラスタ化インデックスを主キーに配置し、通常のインデックスをpersonIdに配置する必要があると言われました。それは私には非常に奇妙に思えます。まず、クラスター化インデックスを一意の列に配置するのはなぜですか。それはクラスタリングとは何ですか?確かに、それはクラスタ化インデックスの無駄です。通常のインデックスが一意の列で使用されると思っていました。また、インデックスをクラスター化すると、別の列をクラスター化できなくなります(テーブルごとに1つですよね?)。
私が誤りを犯したと言われる理由は、クラスター化されたインデックスをPersonIdに置くと挿入が遅くなると彼らが信じているからです。選択の速度が5%向上すると、挿入と更新の速度が95%低下します。それは正しいですか?
personIdをクラスター化するため、PersonIdを挿入または変更するときは常にSQL Serverがデータを再配置する必要があると彼らは言います。
それで私は尋ねました、もしそれがとても遅いのになぜSQLはCLUSTERED INDEXの概念を持っているのでしょうか?彼らが言っているのと同じくらい遅いですか?最適なパフォーマンスを実現するには、どのようにインデックスを設定する必要がありますか?私はSELECTがINSERTよりも使用されていると思っていました...しかし、彼らはINSERTSでロックの問題があると言っています...
誰かが私を助けてくれることを願っています。