2017-01-07 2 views
1

私は、「テキスト」列フィールドのフィルターを使用して大量の表(行数)から大量の表(行数)を取得する必要があります。問題は、このテーブルの単純なクエリに続く通常の反復ではタイムアウトです。非常に大きなMysql DBから「テキスト」列フィールドを取得しています

select * from st_overflow_tbl where uniue_txt_id = '123456' 

私はexplainコマンドを実行し、unique_txt_idに索引がないことを確認しました。以下の出力。

"id","select_type","table","type","possible_keys","key","key_len","ref","rows","Extra" 
1,"SIMPLE","st_overflow_tbl","ALL",NULL,NULL,NULL,NULL,12063881,"Using where" 

I、そして、このテーブルのインデックスを作成しようとしましたが、それは次のエラーメッセージで失敗している - 私は実行していた

BLOB/TEXT column 'uniue_txt_id' used in key specification without a key length 

コマンドはこれです -

alter table st_overflow_tbl add index uti_idx (uniue_txt_id) 

付き私が持っている上記の質問に記載されているシナリオ -

  1. に非常に大きなテーブルで 'テキスト'フィールドを検索している場所にデータをフェッチする(テーブルにインデックスを作成するよりも)良い方法はありますか?
  2. このテーブルにインデックスを作成するにはどうすればよいですか?私は何を間違っているのですか?
  3. 私の用途にもっと特定してください。私はこのテーブルのインデックスを作成することはできません。それでも私は同じ選択クエリ(上記)でこのテーブルから高速にデータをフェッチできますか? unique_txt_idフィールドは常に数値になります(これは今までです)。

答えて

1

列にはいくつかの文字しかない場合は、列を適切なタイプ(varchar(32)など)に変更します。

あなたがインデックスに最初の長さを指定することができ、それを行うにしたくない場合は、次の

alter table st_overflow_tbl add index uti_idx (uniue_txt_id(32)) 

そして、最後に、それは本当にそうに言葉とを含むテキスト列である場合、あなたはフルテキストインデックスを調べることができます。

+0

インデックス登録クエリの問題を解決するのに役立ちましたので、回答を受け入れてください。しかし、今問題は、この索引付けの問合せがタイムアウトしたことです。私はUIツール、そのシンプルな端末を使用していません。どのように私は確認することができます、サーバーは接続をリセットしないでください?私はSQL Serverにアクセスできません。 –

+0

@ManishShukla。 。 。テーブルの大きさはどれくらいですか? –

+0

約500万エントリ。 (説明コマンドで12063881という数字になりません。実数が変更されました。) –

関連する問題