インデックスで
3 posters
インデックスで
こんばんは。
デベロッパカンファレンスで話題になっていたインデックスの
B-treeとクラスタの切り分けの件です。
http://www.4d.com/jp/support/resources/exampleapplications/demo/indexes.html
には以下のようにあります。
- B-ツリーインデックス: 繰り返しの少ない値に使用されます (IDや名前等)
- クラスタインデックス: 値が繰り返される場合に使用されます (ブール, 敬称等)
ですが、「繰り返しの少ない」ってどの程度でしょうか。具体的な要素数の程度はあるでしょうか。
たとえば10個なら、とか、、、
デベロッパカンファレンスで話題になっていたインデックスの
B-treeとクラスタの切り分けの件です。
http://www.4d.com/jp/support/resources/exampleapplications/demo/indexes.html
には以下のようにあります。
- B-ツリーインデックス: 繰り返しの少ない値に使用されます (IDや名前等)
- クラスタインデックス: 値が繰り返される場合に使用されます (ブール, 敬称等)
ですが、「繰り返しの少ない」ってどの程度でしょうか。具体的な要素数の程度はあるでしょうか。
たとえば10個なら、とか、、、
shozo Oe- 投稿数 : 21
登録日 : 2016/07/12
Re: インデックスで
Oe wrote:「繰り返しの少ない」ってどの程度?
私もいろんなデベロッパーの意見に興味があります☆
このセミナー(#118近辺から)でも,両者を比較していますが,セレクティビティ(多様性の度合い)に加えて,並び替えやDISTINCT VALUESの有無など,他の要素も考慮する必要があるかもしれません。
重複不可のフィールドにクラスターを張ることもできますが,その場合,DISTINCT VALUESがB-Treeよりも速くなり,前方一致などのクエリ処理とORDER BYが少し遅くなるような気がします。あとはインデックスのサイズ(キャッシュに占める割合)も気になりますね。それに,レコード数によっては関係が逆になるかもしれません・・・
miyako- 投稿数 : 480
登録日 : 2016/07/05
Re: インデックスで
こんにちは。横からの便乗書き込みですみません。
インデックス設定の「自動」って「Bツリー」か「クラスターBツリー」のどちらかをフィールドタイプやレコード数などによって4Dが判断してどちらかを決めてくれるという意味だと思っていたのですが間違っていますでしょうか。
表示上は「自動」ですが「Bツリー」かクラスターBツリー」のどちらかが4Dによって選ばれて設定されているということですよね。
「自動」と設定したものが実際「Bツリー」か「クラスターBツリー」のどちらが選択されたかを知る方法はないのでしょうか。ストラクチャエディタのインデックスリストでも「自動」としか表示されません。
インデックス設定の「自動」って「Bツリー」か「クラスターBツリー」のどちらかをフィールドタイプやレコード数などによって4Dが判断してどちらかを決めてくれるという意味だと思っていたのですが間違っていますでしょうか。
表示上は「自動」ですが「Bツリー」かクラスターBツリー」のどちらかが4Dによって選ばれて設定されているということですよね。
「自動」と設定したものが実際「Bツリー」か「クラスターBツリー」のどちらが選択されたかを知る方法はないのでしょうか。ストラクチャエディタのインデックスリストでも「自動」としか表示されません。
ssx4dac- 投稿数 : 5
登録日 : 2016/07/19
Re: インデックスで
たしかに「自動」は「おまかせ」なのですが,
運用中にインデックスのタイプが変わることはなく,
フィールドのタイプで単純に決まるみたいです。
http://www.4d.com/blog/index-type-automatic.html
実際には
フィールドがブール型あるいは外部キー:クラスターBツリー
それ以外:すべてBツリー
ということらしいのですが,個人的に調べたわけではないので・・・
で,インデックスの内部的なタイプを調べる方法ですが,
どうも「自動」の実体を知る方法はないように思えます。
たとえば,下記のコードでも,自動は「7」でした。
http://doc.4d.com/4Dv15R4/4D/15-R4/System-Tables.300-2818874.ja.html
EXPORT STRUCTUREでも同じ情報が得られますね。
http://doc.4d.com/4Dv15R4/4D/15-R4/EXPORT-STRUCTURE.301-2825149.ja.html
きちんと設定したいならCREATE INDEXを使用するように,ってことなのでしょうか・・・
http://doc.4d.com/4Dv15R4/4D/15-R4/CREATE-INDEX.301-2825155.ja.html
別に全部「自動」でも良いんじゃないかな,と思ったりもしますけど・・・
運用中にインデックスのタイプが変わることはなく,
フィールドのタイプで単純に決まるみたいです。
http://www.4d.com/blog/index-type-automatic.html
実際には
フィールドがブール型あるいは外部キー:クラスターBツリー
それ以外:すべてBツリー
ということらしいのですが,個人的に調べたわけではないので・・・
で,インデックスの内部的なタイプを調べる方法ですが,
どうも「自動」の実体を知る方法はないように思えます。
たとえば,下記のコードでも,自動は「7」でした。
- Code:
$field:=->[Table_1]ID
$TABLE_ID:=Table($field)
$COLUMN_ID:=Field($field)
C_BOOLEAN($KEYWORD)
C_LONGINT($INDEX_TYPE)
Begin SQL
SELECT KEYWORD, INDEX_TYPE
FROM _USER_INDEXES
WHERE INDEX_ID =
(
SELECT INDEX_ID
FROM _USER_IND_COLUMNS
WHERE TABLE_ID =:$TABLE_ID AND COLUMN_ID = :$COLUMN_ID
LIMIT 1
)
LIMIT 1
INTO :$KEYWORD, :$INDEX_TYPE
End SQL
http://doc.4d.com/4Dv15R4/4D/15-R4/System-Tables.300-2818874.ja.html
EXPORT STRUCTUREでも同じ情報が得られますね。
http://doc.4d.com/4Dv15R4/4D/15-R4/EXPORT-STRUCTURE.301-2825149.ja.html
きちんと設定したいならCREATE INDEXを使用するように,ってことなのでしょうか・・・
http://doc.4d.com/4Dv15R4/4D/15-R4/CREATE-INDEX.301-2825155.ja.html
別に全部「自動」でも良いんじゃないかな,と思ったりもしますけど・・・
miyako- 投稿数 : 480
登録日 : 2016/07/05
Re: インデックスで
miyakoさん、こんにちは。
なるほど。レコード数や中に含まれている値の出現回数までも考慮して決めてくれるわけじゃないんですね。
これまで運用が始まって、ある程度レコード数が増えてきた時にインデックスの再作成をしていたのですが意味はないということですね。
速くなったような気がしていたのはインデックスタイプが変わったためじゃなくてきれいに並び直されたからですね。
私もそう思いました・・
たしかに「自動」は「おまかせ」なのですが,運用中にインデックスのタイプが変わることはなく,
フィールドのタイプで単純に決まるみたいです。
なるほど。レコード数や中に含まれている値の出現回数までも考慮して決めてくれるわけじゃないんですね。
これまで運用が始まって、ある程度レコード数が増えてきた時にインデックスの再作成をしていたのですが意味はないということですね。
速くなったような気がしていたのはインデックスタイプが変わったためじゃなくてきれいに並び直されたからですね。
別に全部「自動」でも良いんじゃないかな,と思ったりもしますけど・・・
私もそう思いました・・
ssx4dac- 投稿数 : 5
登録日 : 2016/07/19
Re: インデックスで
確か昔「ブールはクラスタ、それ以外はBツリー」という説明を受けたような気がします。
それに限らず、たとえば、
男は1 女は2 それ以外は0としている場合
など出現要素が限られているケースにも、クラスタでいいんですよ、という説明と解釈すればいいのでしょうね。
それに限らず、たとえば、
男は1 女は2 それ以外は0としている場合
など出現要素が限られているケースにも、クラスタでいいんですよ、という説明と解釈すればいいのでしょうね。
shozo Oe- 投稿数 : 21
登録日 : 2016/07/12
Permissions in this forum:
返信投稿: 不可
|
|