4D-JUG
Would you like to react to this message? Create an account in a few clicks or log in to continue.

インデックスで

3 posters

Go down

インデックスで Empty インデックスで

投稿 by shozo Oe 2016-07-19, 9:57 pm

こんばんは。

デベロッパカンファレンスで話題になっていたインデックスの
B-treeとクラスタの切り分けの件です。

http://www.4d.com/jp/support/resources/exampleapplications/demo/indexes.html
には以下のようにあります。
- B-ツリーインデックス: 繰り返しの少ない値に使用されます (IDや名前等)
- クラスタインデックス: 値が繰り返される場合に使用されます (ブール, 敬称等)

ですが、「繰り返しの少ない」ってどの程度でしょうか。具体的な要素数の程度はあるでしょうか。
たとえば10個なら、とか、、、

shozo Oe

投稿数 : 21
登録日 : 2016/07/12

トップに戻る Go down

インデックスで Empty Re: インデックスで

投稿 by miyako 2016-07-20, 1:12 pm

Oe wrote:「繰り返しの少ない」ってどの程度?

私もいろんなデベロッパーの意見に興味があります☆

このセミナー(#118近辺から)でも,両者を比較していますが,セレクティビティ(多様性の度合い)に加えて,並び替えやDISTINCT VALUESの有無など,他の要素も考慮する必要があるかもしれません。

重複不可のフィールドにクラスターを張ることもできますが,その場合,DISTINCT VALUESがB-Treeよりも速くなり,前方一致などのクエリ処理とORDER BYが少し遅くなるような気がします。あとはインデックスのサイズ(キャッシュに占める割合)も気になりますね。それに,レコード数によっては関係が逆になるかもしれません・・・

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

インデックスで Empty Re: インデックスで

投稿 by ssx4dac 2016-07-21, 4:34 pm

こんにちは。横からの便乗書き込みですみません。

インデックス設定の「自動」って「Bツリー」か「クラスターBツリー」のどちらかをフィールドタイプやレコード数などによって4Dが判断してどちらかを決めてくれるという意味だと思っていたのですが間違っていますでしょうか。

表示上は「自動」ですが「Bツリー」かクラスターBツリー」のどちらかが4Dによって選ばれて設定されているということですよね。

「自動」と設定したものが実際「Bツリー」か「クラスターBツリー」のどちらが選択されたかを知る方法はないのでしょうか。ストラクチャエディタのインデックスリストでも「自動」としか表示されません。

ssx4dac

投稿数 : 5
登録日 : 2016/07/19

トップに戻る Go down

インデックスで Empty Re: インデックスで

投稿 by miyako 2016-07-21, 5:06 pm

たしかに「自動」は「おまかせ」なのですが,
運用中にインデックスのタイプが変わることはなく,
フィールドのタイプで単純に決まるみたいです。

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

別に全部「自動」でも良いんじゃないかな,と思ったりもしますけど・・・ pig

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

インデックスで Empty Re: インデックスで

投稿 by ssx4dac 2016-07-22, 10:16 am

miyakoさん、こんにちは。

たしかに「自動」は「おまかせ」なのですが,運用中にインデックスのタイプが変わることはなく,
フィールドのタイプで単純に決まるみたいです。

なるほど。レコード数や中に含まれている値の出現回数までも考慮して決めてくれるわけじゃないんですね。
これまで運用が始まって、ある程度レコード数が増えてきた時にインデックスの再作成をしていたのですが意味はないということですね。
速くなったような気がしていたのはインデックスタイプが変わったためじゃなくてきれいに並び直されたからですね。

別に全部「自動」でも良いんじゃないかな,と思ったりもしますけど・・・

私もそう思いました・・

ssx4dac

投稿数 : 5
登録日 : 2016/07/19

トップに戻る Go down

インデックスで Empty Re: インデックスで

投稿 by shozo Oe 2016-07-22, 11:13 am

確か昔「ブールはクラスタ、それ以外はBツリー」という説明を受けたような気がします。
それに限らず、たとえば、
男は1 女は2 それ以外は0としている場合
など出現要素が限られているケースにも、クラスタでいいんですよ、という説明と解釈すればいいのでしょうね。

shozo Oe

投稿数 : 21
登録日 : 2016/07/12

トップに戻る Go down

インデックスで Empty Re: インデックスで

投稿 by Sponsored content


Sponsored content


トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可