2

MySQL(MyISAM)テーブルに2つの列があると仮定します。

title VARCHAR(1500)
url VARCHAR(155)

両方の列に複合一意インデックスを作成したいと思います。(私の列のように)長すぎる列の長さ制限機能を知っていtitleます。複合インデックスとどのように連携しますか?

私が欲しいのは次のようなものです:

|--- url_value ---| + |--- title_value ---|
|--------155------| + |--------rest-------| <-- This should be the key length

つまり、キーの長さは最大である必要があります(utf8をエンコードとして使用しているため、一意のインデックスでは1列あたり333文字に制限されています)。ここで、列の155文字すべてと列urlの178文字がtitle一意のインデックスで尊重されます。 。悪い英語でごめんなさい。私はできる限り説明しようとしました。混乱しそうな場合はご容赦ください。必要に応じて、喜んで詳細情報を提供します。

4

1 に答える 1

2

あなたの質問が何であるか正確にはわからないので、これは実際には答えられないかもしれませんが、そのような長いフィールドに一意性を強制するための1つのオプションは、代わりにMD5などを使用して長いフィールドのハッシュに一意の制約を強制することですニーズに合った他のハッシュアルゴリズム。それで...

title VARCHAR(1500)
url VARCHAR(155)
title_md5 VARCHAR(16)

更新さtitle_md5れるたびに自動的に設定されるトリガーを作成できます。title次に、独自のインデックスをに配置します(url,title_md5)

もちろん、これにはいくつかの欠点があります。実際のテーブルにはより多くのオーバーヘッドがありますが、その多くは、より小さく/より効率的なインデックスによって相殺できます。また、インデックスを作成title_md5しても実際の列の検索が速くなるわけではないため、検索titleを行う必要がある場合は、の「重複」インデックスが必要になるtitle場合があります。

于 2011-08-20T04:54:33.627 に答える