2

我的网站上有一个页面,如果我的表中的“活动”列不为空,则显示我的用户,如果不是,请不要打扰。

不过,在我走得更远之前,假设我有 100 个用户,在我的页面上进行此查询会大大降低速度吗?基本上我的索引页面上有我的查询,所以当用户访问我希望它运行,并从我的表中提取我的所有数据......

while($r = $q->fetch(PDO::FETCH_LAZY)){
    echo '<div class="user">'.$r["user"].'</div>';
}
4

2 回答 2

1

它看起来更像是一个 SQL 问题,而不是一个 PHP 问题。

您的查询如下所示:

从 usertable 中选择用户名、全名、whatever_else,其中 active = 1;

如果您在活动列上创建索引,这应该是一个非常快速的查询:

create index idx_active 
on usertable
(active desc);

我使索引降序,以便首先排列值 1(在我的示例中,1 是活动的,0 是非活动的,活动列是一个整数)。

我假设从长远来看,你会比不活跃的人少得多。您将始终查询表用户表的一小部分。

希望这可以帮助。

于 2012-07-10T21:57:05.247 回答
1

最简洁的答案是不。对于合理数量的用户,您应该不会看到明显的延迟。但是,如果您预计会有成千上万的用户,则最好使用任意数量的实践来优化性能,例如:

  • 分页:使用LIMIT带有查询的子句和各种链接来提供对所有用户记录的访问。这样,无论您的表增长多少,性能都将始终保持较高水平。

  • 用户名的简单文本搜索表单。考虑必须浏览几百个用户才能到达特定的用户,而不是让服务器为你做这件事。如果您采用这种方式,请不要忘记索引搜索将应用于的字段以确保最佳性能。

  • 索引您在查询中用作标准的字段,ndefontenay 涵盖了这些字段,我只是为了完整性而提及它。


编辑:关于您的问题,如果您想要获取该字段active不为空的所有用户,您可以这样做:

 SELECT * FROM User WHERE active IS NOT NULL

一个小提示:在性能方面,最好指定要检索的字段,而不是收集所有字段。例如,如果您想检索每个用户的用户名和电子邮件,您可以这样做:

 SELECT username, email FROM User WHERE active IS NOT NULL
于 2012-07-10T22:02:53.793 回答