ハッシュインデックスはいつ妥当になるのですか?


4

MySQLは本来ハッシュインデックスをサポートしていません。そのため、疑似ハッシュ列を作成してハッシュ列にインデックスを作成するには、いくつかの考え方が必要です。

そしてテキストフィールドが長い場合、ハッシュはそれらが必要とするオーバーヘッドの価値があることは広く理解されているようです。しかし、テキストはハッシュについて考え始めるのにどれくらいの期間が必要ですか?

128ビットのハッシュを使用するつもりなら、テキスト列には最低でも何文字のしきい値が十分でしょうか。

編集する私の別の質問に記載されている詳細はおそらく役に立つhttps://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram

  0

あなたの要件は何ですか?索引は、照会オプティマイザーがそれらを使用する形式で照会が存在する場合にのみ機能します。問題のデータの性質は何ですか?このデータを含むどのような種類のクエリを実行しますか? 14 9月. 112011-09-14 18:18:53

  0

ここにプロジェクトの説明がありますhttp://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram 14 9月. 112011-09-14 18:49:42

3

ディスクの保存が開始されると、それは合理的になり始めます。しかし同時に、あなたの計算能力を取り始めます。

最近のディスク容量は安いと見なされますが、SSDを使用している場合はそれほど安くはありません。完全一致が必要な場合は、あまりにも多くのCPUを必要としないので、より良いオプションになる可能性があります。

ハッシュの使用を満たすためのテキスト列の長さについての正確な答えは、DBAのスキルからシステムへのロードまでの多くの要素に基づいて異なります。

しかし、ハッシュを使用してRAMの50%以上を保存すると、RAMの節約量は少なくとも2GB以上であれば、このルートを取る価値があると思われます。そうでなければ、不要なリハーサルかもしれません。


3

ハッシュインデックスが必要な理由がわかりません。

しかし、text/varcharカラムのインデックスを探しているのなら、MyISAM/full-textを使うか、SphinxやLuceneのような外部のものを使うことができます。

あるいは、1000バイト以下であれば、別のハッシュバージョンを使用して追加の列を作成してから、MySQLでインデックスを作成することもできます。

あなたの質問に答えてください。

  0

疑似ハッシュインデックスを調べる理由は、私のテーブルに150万レコードと私は限られたメモリ(8GB)を持っているので、私はインデックスを最適化したいし、インデックスをテキストカラムに置いたくないのは、あまりにも多くのRAMを食べるからです。 14 9月. 112011-09-14 17:55:51

  0

インデックスを作成するテキスト列の文字数を指定できます(また、指定する必要があります)。mytextcolumn(1000)のように - 1000が限界です。私はMySQL側でメモリ部分を処理するようにしました。あるいは、これらのものにSphinxを使用することは、おそらく仕事に最適なツールになるでしょう。 15 9月. 112011-09-15 06:58:59

  0

ハッシュ・カラムを作成し、ハッシュ・カラムにユニーク制約を設定するのではなく、可変長である場合に、テキスト・カラムにインデックスを配置する必要があります。ハッシュ・カラムにインデックスを置くことの問題だけが、できるだけ衝突を最小限に抑えることです。 15 9月. 112011-09-15 16:42:11

  0

別のハッシュされた列を作成して索引付けするだけでなく、アプリケーションに独自のコードを追加して検索することもできます。私はこれが他のツールを使用して既に解決されている問題であり、他の人たちによって大部分が検証されていると言っています。あなたの道がうまくいくかどうかを確認したいと思えば、それほど複雑ではない、私のすべての手段、試してみてください。 16 9月. 112011-09-16 10:41:14

  0

実際、これらのツールは、スフィンクスのような全文検索ソリューション用です。しかし、ここでは、16バイトのハッシュを取ることが可能になる時期を知るために、ここでもっと興味を持っています。同様に、100バイトのテキスト列(インデックスを追加した場合)を格納する代わりに、16バイトを使用する価値があります。そして、最も重要なのは、レンジ・スキャンではなく完全一致だけが必要であるということです。 16 9月. 112011-09-16 18:45:01


0

あなたの説明を読んで、私はハッシュが意味をなさない方法を知ることができました。しかし、メモリの使用について言及すると、インデックス・カラムのサイズによって大規模なデータ・セットの検索が不可能になることはありません。 mysqlの基本インデックス技術はbtreeです。 Btreesは分裂して征服する。

私が与えることができる具体的なアドバイスはこれです:あなたはmd5()ハッシュを使用すると仮定しましょう。効率を最大限にするには、ハッシュがchar(32)のinnodbエンジンテーブルのプライマリキーにする必要があります。 innodbはインデックスをクラスタ化しているので、データを取得するとディスクの読み込みが節約され、md5()ハッシュの結果が決して変更されないので実行できるように、 。

  0

RAMを保存する目的がInnoDBを使用するのが賢明な決定でしょうか? 15 9月. 112011-09-15 16:44:51