我的图书表中有超过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>";
?>
答案 0 :(得分:1)
应用索引或您可以使用全文索引和搜索 http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
答案 1 :(得分:1)
$search = mysql_real_escape_string($_REQUEST['searc']);
$qry = "select book_name from books where book_name like '$search%' LIMIT 10";
并且普通索引将解决问题......暂时
答案 2 :(得分:0)
更改您的查询,如下所示。它只会获取前30个项目。现在速度会增加。您也可以正确索引表格以加快
$qry="select book_name from books where book_name like '%$search' LIMIT 0 , 30";
答案 3 :(得分: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注入漏洞。
答案 4 :(得分:0)
尝试在MYSQL中执行以下代码:
ALTER TABLE `books` ADD INDEX `book_name` (`book_name`):
这将为表添加一个索引,这可以加快搜索速度。