2012-03-31 9 views
1

私はこれを追跡しようとかなりの時間を費やしました。私は私のサイト(http://www.devbridge.com/projects/autocomplete/jquery/)にボックスオートコンプリートを使用しました。単語を入力すると、それはGET変数としてページに送られ、mySQLデータベースで検索されます。大規模なデータベース検索でオートコンプリートが遅い

$get = $_GET['query']; 
$query = "SELECT title,author,id,isbn10,isbn13 FROM textbook 
     WHERE title LIKE '" . $get . "%' 
     OR author LIKE '" . $get . "%' 
     LIMIT 5 
     "; 
$result = mysql_query($query,$connection); 
$resString = ""; 
$idString = ""; 
while($data = mysql_fetch_array($result)){ 
$resString .= "'" . title($data['title']) . " by " . $data['author'] . "',"; 
$idString .= "'" . $data['id'] . "',"; 
} 
$resString = rtrim($resString, ','); 
$idString = rtrim($idString, ','); 
$code = "{\n"; 
$code .= "query:'" . $get . "',\n"; 
$code .= "suggestions:[" . $resString . "],\n"; 
$code .= "data:[" . $idString . "]\n"; 
$code .= "}"; 
echo $code; 

これは読んで、結果としてバック撃たれる基本的なJSONデータセットを出力します。ページには、次のようになります。問題はそれが本当に遅かったということです。 "LIMIT 5"は、それをスピードアップするためにトンを助けました。しかし、最初の結果セットが表示されてからまだ遅く実行されています。私は "ハム"で入力することができますし、それはすぐに結果セットと戻ってくるだろうが、その後の任意の文字/単語が表示するには4-6秒かかります。データベースはおよそ300Kレコードです。私のデータベース構造のページの画像を添付:

database http://semesterkey.com/images/data.jpg

イムだけで物事をスピードアップする方法を理解しようとしています。私はそれが私のデータベース構造かもしれないと思う、それはどのように私はクエリをすることができますか?私はちょっと考えていない。あなたの助けを前もってありがとう!

+0

@ Yogeshが正しいとすれば、検索するフィールドをインデックスする必要があります。 –

+0

クラスタ化インデックスまたは非クラスタ化インデックスをお勧めしますか?初心者ここ! – user791187

答えて

1

唯一の解決策は、あなたのデータベースのオートコンプリートで表示したい列にその使用インデックスは、これはあなたが

+1

もっと多くのソリューションがあるかもしれませんが、これは最初に試してみてください:) –

+0

はきれいに働いた!ありがとうございました! – user791187

0

はい、あなたの問題に対する答えは、(著者、タイトルのインデックスで役立つことを願って、そこです)列のグループ。 DBによって使用されるスペースの量が増え、そのテーブルのINSERT、UPDATE、DELETEのパフォーマンスが低下しますが、問合せのパフォーマンスが向上します。

+0

クラスタ化されていないインデックスまたはクラスタ化されたインデックスをお勧めしますか?私はお詫びします、私はちょうど私の足がプログラミングのこの分野で濡れている! – user791187

+0

クラスタ化されていないものを最初に試してください。パフォーマンスが満足できるものでない場合にのみ、クラスタード・インデックスに移動できます。クラスタリングされたものは物理的にレコードの順序を変更しています。それは難しいコアな仕事です。 –

0

は、著者とタイトルのインデックスを使用して、パフォーマンスを向上させるために役立つことがあります。 ) COLUMN_TITLE Your_table_name ADD INDEX (答え上記のどの

ALTER TABLEを把握していない人のための

0

構文help。

関連する問題