-1

我的书籍表中有超过 100,000 条记录,我的数据库是 MySQL。我正在使用 PHP 创建一个自动建议。它正在工作,但速度很慢。我认为这是因为大量数据。有什么解决方案可以有效地搜索数据,我们如何提高搜索过程的速度?

这是我的代码:

<?php
$search=$_REQUET['searc'];
$qry="select book_name from books where book_name like '%$search'";
$result=mysql_query($qry);
echo "<ul>";
while($rows=mysql_fetch_array($result))
{
echo "<li>".$rows['book_name']."<li>;
}
echo "</ul>";
?>
4

5 回答 5

1
$search = mysql_real_escape_string($_REQUEST['searc']);
$qry = "select book_name from books where book_name like '$search%' LIMIT 10";

一个普通的索引会解决这个问题......一段时间

于 2013-07-31T10:48:13.727 回答
1

应用索引,或者您可以使用全文索引并搜索 http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

于 2013-07-31T10:44:22.847 回答
0

如下更改您的查询。它只会获取前 30 个项目。现在速度会提高。您还可以正确索引您的表格以加快速度

  $qry="select book_name from books where book_name like '%$search' LIMIT 0 , 30";
于 2013-07-31T10:44:53.280 回答
0

尝试在 MYSQL 中执行以下代码:

ALTER TABLE `books` ADD INDEX `book_name` (`book_name`):

这将为表添加一个索引,这应该会加快搜索速度。

于 2013-07-31T10:49:46.387 回答
0

您正在搜索列的后缀。索引使用前缀,因此此查询需要全表扫描。要解决此问题,您可以添加一个反向的列,对其进行索引,并将其用于搜索:

alter table books add book_name_reverse tinytext;
update books set book_name_reverse = reverse(book_name);
alter table books add index(book_name_reverse);

之后,您可以使用以下方法进行有效搜索:

$search_rev=strrev($_REQUET['searc']);
$qry="select book_name from books where book_name_reverse like '$search_rev%'";

但是请使用 PDO 或 MySQLi 准备好的语句而不是这样做。像这样将用户提交的值拼接到查询中会产生典型的 SQL 注入漏洞。

于 2013-07-31T10:47:27.100 回答