5

ユーザーがテキストを入力できるmysqlデータベースがあります。次に、このテキストを検索できる必要があります。mysql の全文検索を実装したばかりで、検索が大幅に高速化されたことは間違いありません。

ただし、驚くことではありませんが、挿入が遅くなりました。しかし、あまりの遅さに驚きました。1 回の挿入には 0.5 ~ 1.5 秒かかります。

テーブルには 3 つのインデックス付きの列があります。

title (max length 200)
description (max length 3000)
content  (max length 10000)

この時点で、テーブルには約 2000 のレコードしかありませんが、これは後のものと比較して何もありません。

助言がありますか?この問題は通常どのように処理されますか? 挿入に時間がかかるのは普通ですか?

全文検索のすべての機能は必要ありません。AND、OR、-、+、" "に相当するものが本当に必要です。したがって、重みなどはありません。そのインデックス作成をオフにして高速化できますか?

4

1 に答える 1

2

egyal のコメントに基づいて回答します。

最終的にSphinxをインストールしました。それは素晴らしいです。リアルタイムのインデックス作成を使用しています。高速検索と高速挿入。mysql フリーテキストの挿入/検索よりもはるかに高速です。確かに、私のデータベースはかなり小さいです。大規模なデータベースで高速にリアルタイムでインデックスを作成するためのトリックがあります (2 つのインデックスに分割され、1 つは古いデータ、もう 1 つは新しいデータです) が、私はそれを必要としませんでした。

ところで: 私は Python/Django を使用しており、sphinx 以外に API やライブラリをインストールする必要はありませんでした:

import MySQLdb
connection = MySQLdb.connect(host='127.0.0.1', port = 9306) 
cursor = connection.cursor()
cursor.execute("select id from my_index where match('stackoverflow')")
results = cursor.fetchall()
# I use my regular connection to insert the IDs into a table in my regular database and then join with that to get actual data.
于 2013-08-10T07:26:20.817 に答える