2

1,000,000 件以上のレコードを含む次のテーブルがあります。

CREATE TABLE `products` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `description` text,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

私がやりたいのは、説明が null の製品をすばやく取得できるようにすることです。空の文字列は忘れてください。

説明によってキーを追加すると、説明全体がインデックス化され、そのような大きなインデックスは必要ありません。私は確かにできる:

ALTER TABLE products ADD KEY has_description (description(1));

これにより、最初の文字のみのインデックスが作成されます。これは「完全な」インデックスを持つよりもはるかに優れていますが、適切なインデックスを作成する方法があるかどうかを知りたいです。

追加の要件は、この値を持つ新しい列を追加することではありません。これは些細なことですが、テーブルに含めたくない情報が重複しています。

すでに次のようなものを試しました

ALTER TABLE products ADD KEY has_description (description IS NULL);

...しかし、うまくいきませんでした。

これはまったくできますか?

4

1 に答える 1

1

既存のフィールドにのみインデックスを付けることができます。

答えは: まさか

ただし、説明の状態 (空かどうか) を含む別のフィールド (およびそのためのインデックス) を追加できます。挿入および更新トリガーを使用して、そのフィールドを常に説明データと同期させます。

于 2012-12-20T19:28:09.740 に答える