我制作了一个PHP脚本,它从MySQL表中请求信息。如果它是正确的,它会做一些事情,但是这个脚本非常慢,因为有许多行不正确。 这是脚本:
$everypost = mysql_query("SELECT MAX(asd) FROM asd;");
$everypost = mysql_fetch_array($everypost);
$id = $everypost[0];
while ($id > 0 && $i < $var2) {
$id = $id - 1;
$tulajid = $context['user']['id'];
$posts = mysql_query("SELECT * FROM asd WHERE asd='$id' AND owner='$var' GROUP BY(asd);");
$prow = mysql_fetch_array($posts);
if(isset($prow['asd'])) {//If it's correct, so the user is the owner
$i++;
}
}
我的问题是它检查每个帖子而不仅仅是用户的帖子。
有没有一些解决方案让它更快?
如果我从$ posts查询中删除AND owner ='$var'
,则速度非常快。
CREATE TABLE `asd` (
`asd` int(10) unsigned NOT NULL,
`id_member` mediumint(8) unsigned NOT NULL,
`score` smallint(2) NOT NULL,
`owner` mediumint(8) unsigned NOT NULL,
`log_time` int(10) unsigned NOT NULL,
PRIMARY KEY (`id_msg`,`id_member`),
KEY id_member (`id_member`),
KEY owner (`owner`),
KEY owner_2 (`owner`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
固溶
答案 0 :(得分:2)
这意味着您需要检查数据库设计。您可能没有,因此需要并在您的owner
列上编制索引。
仅供参考,you shouldn't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
答案 1 :(得分:0)
我认为这里的主要问题不一定是数据库设计,而是您查询信息的方式。你在一个查询中提取最新的东西,然后循环并为循环的每次迭代发出一个查询。先生,是疯了。您可以使用正确的条件以更少的查询执行此操作。
如果没有来自您的架构的更多信息,我会假设您可以执行以下操作:
SELECT a.* FROM asd a WHERE a.owner = ? ORDER BY a.asd DESC
这将为您提供asd
元组的所有实例,其中owner
是某个值(您将?
替换为您的值),由{{1}排序,从最高到最低。我不确定那是不是你想要的,如果你可以发布关于表的更多信息和PHP中的变量我可能会给你一个更好的答案,但无论你试图得到的数据我很确定有很多比你现在做的更有效的方式。
答案 2 :(得分:0)
它仍然很慢。 id_msg = asd和id_poster = owner。