0

私は2つのテーブルしかないデータベースを持っていますObject、、User

明らかに、ユーザーテーブルにはすべてのユーザーに関する情報があり、オブジェクトテーブルには数百万のレコードがあります

ObjectTable

  1. Id(int)
  2. Text1(nvarchar(max))
  3. Text2(nvarchar(max))

私は翻訳者を作ろうとしています。まず、次のようにすべてのデータをデータベースに入れます。

1:良い、よく
2:悪い、NotWell
3:男性、女性の夫

私のサイトのユーザーに2つのテキストボックスがあるとしたら、次のテキストを入力します

Good Bad Man

次に、その文字列をスペースで分割し、文字列の配列を作成します。次に、配列の最初の要素を取得してサーバーに移動Goodし、データベースに一致するものがあるかどうかを確認します。一致するものが見つかった場合は、それを置き換えます。私たちが持っているText2ような価値は、 翻訳するのに時間がかかりすぎて、時にはそれが与えるものです。だから、それに対処するための最良の方法は何ですか WellGoodRequest Timed Out

4

1 に答える 1

1

タイムアウトの問題について役立つ多くの情報を提供していません。

私があなたに言うことができるのは:

  • まず、Text1列とText2列にインデックスがあることを確認します。そうでない場合は、追加します
  • SQLクエリを見てください。それはそうあるべきですSELECT * FROM OBJECT WHERE TEXT1='Good'(多分、LIKEで多くのものに戻るのを避けるためにトップ100を追加してください)。インデックスをスムーズに実行するには、TEXT1列で呼び出される関数(大文字やトリムなど)がないようにする必要があります。likeを使用する場合は、TEXT1 LIKE'good%'(最後の%)である必要があります。
  • likeを使用する場合は、テーブル全体を空のエントリ、%または_エントリで返さないように注意してください(LIKE'%'、LIKE'%%'、LIKE'_%'は悪いことになる可能性があります)
  • 単語を保存するだけの場合、なぜnvarchar(max)を使用するのですか?
  • SQLインジェクションを回避するためにエントリをサニタイズすることを忘れないでください
于 2012-12-13T09:01:03.913 に答える