0

WebベースのJavaアプリケーションでは、このスキーマのテーブルがあります

 Column          Datatype

 Userid          char(25) primary key;
 name            char(100)
 address         varchar(120)
 email           char(50) UNIQUE;

120000レコード。(カーディナリティ)

次に、column-> nameの下に格納されている一致する名前(文字ごと)をフェッチします。検索ボックスに入力し始めたとき(明らかにajaxを介して)。

たとえば、pと書くと、文字pで始まるすべての名前が取得され、リストに追加されます。

現在、インデックス作成は使用していません。では、どうすればアクセス/検索を高速化するためにそれを使用できますか?

私が使用しているデータベースは、MySql5フロントエンドとしてのjavaです。

この目的のために適切なコレクションを使用するための提案やハッシュは、はいの場合はデータベースで役立ちます。詳しく説明してください。

私はこのStackOverflowersの正しいトラックを持っていますが。質問を変更し、そのすべての定義と使用統計を使用してインデックス作成の代わりにハッシュを使用する場合、それを行う方法とそれは有益ですか?

4

6 に答える 6

1

最も簡単な方法は次のとおりです。

ALTER TABLE `your_table` ADD INDEX(`name`);

また、名前は可変長であるため、代わりにVARCHARを使用してください。キーにはINTを使用してください!

1文字だけで検索する場合は、インデックスを1バイトに縮小できます。

ALTER TABLE `your_table` ADD INDEX `name`(`name`(1));

次に、パフォーマンスを向上させるために、カバーリングインデックスを使用できます。つまり、必要なすべてのデータを適切にインデックス化して、メモリに常駐させ(サーバーが適切に構成されていることを確認してください)、MySQLがディスクから読み取る必要がないようにする必要があります。

于 2012-07-06T06:57:06.160 に答える
1

デフォルトではPRIMARY KEYUNIQUEプロパティはテーブルでインデックス付けされます。したがって、emailuseridはすでにインデックスに登録されています。(注:useridCHARには使用しないことを強くお勧めします)

そして使用する

INDEX `<any-name-here>` (`name`) # The `name` is the column and `<any-
                                 # name-here>` is the name of index.
于 2012-07-06T06:57:28.880 に答える
1
CREATE INDEX id_index ON employee_table (employeeID);
于 2012-07-06T07:01:56.040 に答える
0

WHERE句に含める列にインデックスを作成します。

クエリが名前である可能性が最も高い場合は、名前列にインデックスを作成します。

これにより、挿入/更新レコードがそのテーブルに活用されるため、INSERT/UPDATE操作の実行速度が低下することに注意してください。

于 2012-07-06T06:58:52.057 に答える
0

DBクエリは使用しません。文字列配列に(一意の)名前をプリロードして、これまでに入力した文字のバイナリ検索を実行できます。これにより、最大限の責任が保証されます。

于 2012-07-06T06:59:44.357 に答える
0

一般的に、データベースインデックスがどのように機能するかを理解する必要があります。

しかし、あなたの問題については、いくつかの提案があります:

このようなものを使用している場合(申し訳ありませんが、MySqlワイルドカード文字は%であると仮定してわかりません)

select * from MyTable where name like '%a%'

ここで、aはユーザーが入力した文字です。最初の%はaの前に文字があることを示しているため、これは大きなテーブルでは機能しません。これは、テーブル全体をスキャンする必要があることを意味します(これはインデックスがほとんど役に立たないことを意味します)。

オートコンプリートを実装して、少なくとも3文字後にオートコンプリートを開始することを検討してください。これにより、次のようなSQLが生成されます。

select * from MyTable where name like 'abc%'

これにより、データベースは「abc」で始まるデータのみを使用するため、インデックスを使用できるようになります。

残念ながら、クエリに使用できるインデックスが列にまったくないため、次のコマンドを使用してインデックスを追加できます。

ALTER TABLE 'table' ADD INDEX('column_you_search')

お役に立てれば。

于 2012-07-06T07:03:12.617 に答える