所以我有一个20mil +行的数据库,我需要一个搜索功能。 所以我有一个PDO代码来搜索,当搜索到的用户名在数据库中时,它不是很快但很好,大约0.9秒。但是当搜索到的用户名不在数据库中时,需要10秒以上。
这是我的代码:
$p = $_GET["p"];
$conn = new PDO("mysql:host=localhost;dbname=x", "x", "x");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $conn->prepare("SELECT `id` from `dbsearch` WHERE `username` = :p LIMIT 1");
$sth->bindParam(':p', $p);
$sth->execute();
$result = $sth->fetchAll();
if($result)
{
foreach($result as $row)
{
echo $row["id"];
}
}
else {
echo "none";
}
我在stackoverflow上搜索了这个,我只能找到像sphinx这样的东西,这对我来说是不可能的,因为我在共享主机上(namecheap)
任何可以帮助我的人? THX。
答案 0 :(得分:4)
您可能只需要一个索引:
create index idx_dbsearch_username_id on dbsearch(username, id)
当名称不在表中时它变慢的原因是因为数据库必须搜索整个表以确保它不存在。如果名称在表中,则它可以在第一次出现时停止。有了索引,两者都应该非常非常快。