0

MySQL テーブルがあります。2 つの列があります。1 つ目は一意の識別子 (INT) で、2 つ目は文字列 (VARCHAR) です。約1.7mのレコードがあります。現時点で、私が行っている唯一の検索は次のとおりです。

select name from artist_name where name like '$q%'"

私の質問は、このテーブルに配置するのに最適なインデックスは何ですか?また、SQL ステートメントの効率を改善するにはどうすればよいでしょうか? ある時点で、最初の列に参加する 2 番目のテーブルを導入する予定ですが、それについては後で取り組みます。

4

3 に答える 3

0

artist_name句を使用した検索クエリがより高速に動作するように、2 番目の列 ( ) にインデックスを配置するlikeことがベスト プラクティスになるようです。間違いなく、一意の識別子がまだ存在しない場合は、一意のインデックスを追加できます。

さらに、検索するアーティストの名前の長さを指定して、インデックスを部分的に配置することを検討することもできます。

MySql のインデックス タイプの詳細については、この記事を確認してください。

于 2012-05-30T08:14:44.090 に答える
0

SphinxSearch - 全文検索

これを行う、

  1. このクエリを mysql プロンプトで実行し、実行時間を記録します。

    SELECT name FROM artist_name WHERE name LIKE '$q%'";

  2. sphinxsearch をインストールします。

  3. 以下のように同じクエリを実行します。

    SELECT name FROM artist_name WHERE MATCH('$q');

実行時間が天文学的に短縮されることがわかります。

上記の高レベルの知識を与えました。

  1. スフィンクス検索をインストールして現在のテーブルの列にインデックスを付けるのは非常に簡単です。もちろん、従うべき一連の手順がありますが、完了すると幸運になります。
  2. 私は自分のアプリで sphinxsearch を使用しています。「ストップワード」、「ワードフォーム」、「ワードステミング」などの機能は、あなたをとても気持ちよくさせてくれます。

利用可能なその他のオプション:

1. Mysql の全文検索 : これもかなりまともです。何かをカスタマイズする必要がない場合は、mysql の全文検索を実行するだけで使用できます。

ALTER TABLE artist_name ADD FULLTEXT(name);

SELECT * 
FROM artist_name
WHERE MATCH(name) 
AGAINST ($q);

sphinx search のインストール方法についてヘルプが必要な場合は、私がお手伝いします。

次回は、SQL クエリの正しい規則に従ってください。これは、FACEBOOK ではなく STACKOVERFLOW です。

于 2012-05-30T10:42:28.053 に答える
-1

B ツリー インデックスを使用する

これを確認してください。

于 2012-05-30T08:02:55.443 に答える