.................................................
<<
10年10月
>>
日
月
火
水
木
金
土
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
最新
twilog
解析
Top
最近の雑記
10/29
http からhttps
...
05/13
ギリギリ過ぎる
...
03/19
AZ-104:Micros
...
06/25
楽天モバイル解
...
02/14
楽天モバイル
02/06
ホテルショコラ
...
最近のコメント
10/07
北本
09/29
拝承
07/28
北本
07/20
ばてれん
10/26
北本
雑記の分類
・
雑ネタ(219)
・
小ネタ(142)
・
ゲーム(68)
・
ゲーム感想(89)
・
音楽(36)
・
映画(45)
・
小説(261)
・
テレビ(34)
・
アプリ(32)
・
ハード(84)
・
食べもの(64)
・
マメ知識(62)
・
資格試験(57)
・
創作活動(71)
・
更新記録(60)
.............................
何となくリンク
.............................
情報系
・同人ど〜らく
・MOON STONE
・カトゆー家断絶
・名前のない部屋
・SWFBLOG
・MFT
・銀行.info
少し気になる
かなり気になる
・EDEN
2023年
03月
05月
10月
2022年
06月
2021年
01月
02月
2020年
02月
05月
09月
2019年
04月
05月
08月
09月
2018年
01月
02月
03月
04月
05月
06月
09月
10月
2017年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2016年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2015年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2014年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2013年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2012年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2011年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2010年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2009年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2008年
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2007年
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
それ以前の雑記
SQL Server 2008自習書のINDEX編が間違ってるんだが大丈夫か?
2010年10月27日(水)20時45分
分類:
マメ知識
[この記事のURL]
SQL Server 2008 の勉強を進めているんですが、
自習書シリーズ
という公式の学習書があります。
この中にある「インデックスの基礎とメンテナンス」に関して
致命的な間違いがあると思うんだが大丈夫か?
問題となっているのは 45ページから書かれている
「カバリング インデックス(複合インデックス)」という項目です。
複合INDEXを以下のSQL文で作成しています。PDF/46頁下段。
CREATE INDEX index_姓名 ON 社員(姓, 名)
作成されたINDEXの図が以下の通りです。
「姓」と「名」だけの複合なのに「社員番号」も入ってます。
上記の複合INDEXを作成し、以下の検索を行った場合、
SELECT 社員番号, 姓, 名 FROM 社員 WHERE 姓 = 'Aoki'
RID Lookupが発生しないと記載されています。
PDF/47頁 項番3 の
実行プランに
RID Lookupがない
。
※RID LookupはPDF/17頁「非クラスタ化インデックスの内部構造」参照。
select文で、姓と社員番号と名を引っ張ってきている為、
姓と名の複合INDEXでは社員番号の情報が入ってません。
よって、実際は、
RID Lookupが発生します
。
実際に姓と名の複合INDEXを作成後、作成されている事を確認します。
Oracleで言う、user_ind_columns が sys.index_columnsなんですが、
Oracleと違い、TABLE名、INDEX名、カラム名が全てidで管理されてます。
よってIDに紐付く和名を取得する為に3つのTABLEを結合しなければいけません。
超めんどくさいです。もっと良い方法ないでしょうかねぇ?
id管理の為、容量は小さく済むんですが面倒ですな!
object_idは一意の為、object_idを名前に変換するOBJECT_NAMEという組み込み関数があるので良いが、index_idやcolumn_idは結合で取得するしかないと思うので大変です(ノД`)
SELECT 社員番号, 姓, 名 FROM 社員 WHERE 姓 = 'Aoki'
で検索を行います。
INDEXには姓と名しか情報がない為、実際のデータ行への参照(RID Lookup)が拝承されています。
今度は一番最初の図の通りの複合INDEXを作成してみました。
INDEX自体に、姓、社員番号、名の情報を持たしています。
姓、社員番号、名を引っ張ってくる検索を行います。
INDEXの検索のみで全てのデータが揃うため、RID Lookpが発生しません。
結論から申し上げますと、
【誤】create index INDEX_姓名 ON 社員(姓,名)
【正】create index INDEX_姓名 ON 社員(姓,社員番号,名)
です。
これかなり致命的な間違いだと思うが大丈夫か?
文福茶釜
たぶんぜんぜん大丈夫ぢゃないけど、今テレビで流れてる「ハリーポッター」のハーマイオニーがやっぱり可愛いのでおっけー。
10/10/29 21:43:05
北本
やはり全然大丈夫ではなかったようだな。
現在もっとアホなことが発生中。
詳しくは本日の雑記でっっ!
10/10/30 01:28:51
レスを書く
コメント(2)≫
≪コメント(2)
文福茶釜
たぶんぜんぜん大丈夫ぢゃないけど、今テレビで流れてる「ハリーポッター」のハーマイオニーがやっぱり可愛いのでおっけー。
10/10/29 21:43:05
北本
やはり全然大丈夫ではなかったようだな。
現在もっとアホなことが発生中。
詳しくは本日の雑記でっっ!
10/10/30 01:28:51
名前(任意)
nik5.144