我的网站上有一个页面,如果我的表中的'active'列不为null,则显示我的用户,如果不是,请不要打扰。
在我走得更远之前,说我有100个用户,在我的页面上查询会减慢很多速度吗?基本上我在我的索引页面上有我的查询,所以当用户访问我希望它运行时,从我的表中提取所有数据......
while($r = $q->fetch(PDO::FETCH_LAZY)){
echo '<div class="user">'.$r["user"].'</div>';
}
答案 0 :(得分:1)
它看起来更像是一个SQL问题,而不是一个PHP问题。
您的查询如下所示:
从usertable中选择username,fullname,whatever_else,其中active = 1;
如果在活动列上创建索引,这应该是一个非常快速的查询:
create index idx_active
on usertable
(active desc);
我使索引下降,以便首先排列值1(在我的示例中,1是活动的0非活动且活动列是整数)。
我认为从长远来看,你的活跃人数会比不活跃的人少得多。您将始终查询表usertable的小子结构。
希望这有帮助。
答案 1 :(得分:1)
简短的回答是否定的。对于合理数量的用户,您不应该看到明显的延迟。但是,如果您预计会有数千名用户,那么最好使用任意数量的做法来优化性能,例如:
分页:对您的查询和各种链接使用LIMIT
子句,以提供对所有用户记录的访问权限。这样,无论您的桌子增长多少,性能都会保持不变。
用户名的简单文本搜索表单。考虑到只需要浏览几百个用户来访问特定的用户,而不是让服务器为您执行此操作。如果你这样做,不要忘记索引搜索将应用的字段,以确保最佳性能。
将您正在使用的字段作为查询条件的索引,这些字段由ndefontenay涵盖,我只是提及它的完整性。
编辑:关于你的问题,如果你想要的是让字段active
不为空的所有用户,你可以这样做:
SELECT * FROM User WHERE active IS NOT NULL
小注意事项:在性能方面,最好指定要检索的字段,而不是收集所有字段。例如,如果您想要为每个用户检索用户名和电子邮件,可以这样做:
SELECT username, email FROM User WHERE active IS NOT NULL