伙计我正在尝试更新有6万行的表格,这是我的代码:
只是忽略代码的逻辑,只需看看它拥有的查询数和循环数。我打算对主查询设置一个限制,但我希望它是SQL的最大限制,这样我就可以节省时间。任何想法的人?
$query=mysql_query("SELECT DISTINCT(nid) FROM `comment` LIMIT ");
//mysql_query("UPDATE comment set thread = '00/' WHERE pid = 0 and uid = 333333");
while($result=mysql_fetch_array($query))
{
$query2=mysql_query("SELECT cid,pid,thread FROM comment WHERE nid = ".$result['nid']." ORDER by created");
while($result2=mysql_fetch_array($query2)){
$nodethread = 0;
if($result2['pid'] == 0)
$thread = int2vancode($nodethread) . "/";
else{
$parent = (string) rtrim((string) $result2['thread'], '/');
$parent=explode('.',$parent);
echo $parent." this is parent</br>";
$max=max($parent);
if($max == '')
{
$thread = $result['thread'].'.'.int2vancode(0) .'/';
}
else
{
//$parts = explode('.', $max);
$parent_depth = count($parent);
echo "parent".$parent_depth;
$last = $parent[$parent_depth];
$thread = $result2['thread'] .'.'. int2vancode(vancode2int($last) + 1) .'/';
}
}
mysql_query("UPDATE comment set thread = '$thread' where cid = ".$result2['cid']."");
}
}
总结一下我的代码,我先来了一个:
while loop for my first query
then i have another while loop inside for my second query
and lastly i have an update inside.
答案 0 :(得分:0)
我认为你想要解决的问题是并发。
INSERT
/ UPDATE
/ DELETE
操作需要锁定才能运行。 MyISAM表将在这些表运行时锁定整个表,而InnoDB通常只锁定受影响的行。如果运行的查询需要访问这些表/行,即使是SELECT
,它也会排队,直到删除锁。
如果其他查询在其间运行并不重要,那么您似乎正在解决 应该之前的一小部分微小查询。如果它不确定,那么您需要切换到InnoDB并使用事务。但是,就目前情况而言,你可能不会对并发查询相互减慢有太多问题。