自动完成缓慢,大型数据库搜索

问题描述:

我花了相当多的时间试图追踪这一个。我在我的网站上使用了盒装自动完成功能(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

可能有更多的解决方案,但这是第一个尝试:) – 2012-03-31 05:48:57

+0

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

是的,回答你的问题是关于(作者,标题索引)组的列。它会增加数据库使用的空间量,并会降低该表中INSERT,UPDATE,DELETE的性能,但会增加查询性能。

+0

你会推荐一个非聚集索引或聚集?我很抱歉,我只是在编程这个领域里沾沾自喜! – user791187 2012-03-31 05:54:37

+0

你应该尝试一个非聚集的第一个。只有在性能不令人满意的情况下,您才能移动到聚簇索引。聚集的一个在物理上重新排序记录。这是一项艰巨的核心工作。 – 2012-03-31 06:04:15

使作者和标题的索引可以帮助您提高性能。

语法帮助那些谁不抓住它上面的回答

ALTER TABLE Your_table_name ADD INDEX ( COLUMN_TITLE );