0

15万行を超えるテーブルがあります。表の1つの列には、「テキスト」タイプがあります。このフィールドには、5万文字を超えるテキストが含まれています。つまり、その列に5万文字を超える15万ブロックのテキストが格納されているということです。

テキストは、さまざまなWebページのHTMLソースです。そのため、改行を保持する必要があるため、varcharタイプを使用できません。

この列が選択されている場所またはWHERE句でクエリを実行する場合、クエリは非常に遅く、完了するまでに永遠に時間がかかります。

たとえば、次で始まる単純なクエリを実行します。

SELECT my_text_column FROM my_table LIMIT 1000

30秒以上かかります。テーブルの1/150で30秒、それは本当に悪いことです。

この列にINDEXを追加しようとしましたが、テキストタイプの列にINDEXを追加できないようです。

この列を最適化し、すべてのクエリが高速になるようにするにはどうすればよいですか?

編集:

完全なテーブル構造は次のとおりです。

CREATE TABLE IF NOT EXISTS `my_table` (
  `url_id` int(10) NOT NULL AUTO_INCREMENT,
  `url` varchar(500) NOT NULL,
  `source` text NOT NULL,
  `completed` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`url_id`),
  KEY `completed` (`completed`),
  KEY `url` (`url`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=150775 ;
4

2 に答える 2

0

列の値が 50K 以上の場合、投稿したクエリは 50M の結果セットを取得します。その場合、時間がかかることは驚くべきことではありません。

于 2013-02-21T01:23:54.213 に答える
-1

全文索引を試しましたか? 通常のインデックスとは少し異なります。msdn にたくさんの例があります

于 2013-02-20T22:34:32.283 に答える