2012-03-31 88 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數據集,並將其作爲結果讀取並回放。問題在於它真的很慢。 「極限5」幫助加速了一些。但是,初始結果集顯示後仍然運行緩慢。我可能會輸入「嗡嗡聲」,它會返回一個快速結果集,但之後的任何字母/單詞需要4-6秒才能顯示。數據庫大致是300K的記錄。附件是我的數據庫結構頁面的圖片:

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

我只是試圖找出如何加快速度。我認爲這可能是我的數據庫結構,這可能是我如何查詢?我只是不知道。在此先感謝您的幫助!

+0

@Yogesh是對的,你應該索引你搜索的字段。 – 2012-03-31 05:48:22

+0

你會推薦一個聚集索引或非聚集索引嗎?新手在這裏! – user791187 2012-03-31 06:03:29

回答

1

目前唯一的解決辦法是要在自動完成,以顯示在您的數據庫列使用索引,希望這將幫助你

+1

可能有更多的解決方案,但這是第一個嘗試:) – 2012-03-31 05:48:57

+0

工作得很漂亮!謝謝! – user791187 2012-03-31 15:10:26

0

是的,回答你的問題是關於(作者,標題索引)組的列。它會增加數據庫使用的空間量,並會降低該表中INSERT,UPDATE,DELETE的性能,但會增加查詢性能。

+0

你會推薦一個非聚集索引或聚集?我很抱歉,我只是在編程這個領域裏沾沾自喜! – user791187 2012-03-31 05:54:37

+0

你應該嘗試一個非聚集的第一個。只有在性能不令人滿意的情況下,您才能移動到聚簇索引。聚集的一個在物理上重新排序記錄。這是一項艱鉅的核心工作。 – 2012-03-31 06:04:15

0

使作者和標題的索引可以幫助您提高性能。

0

語法幫助那些誰不抓住它上面的回答

ALTER TABLE Your_table_name ADD INDEX ( COLUMN_TITLE );