0

我正在开发一个门户网站/大型网站,我有一个关于如何在特殊情况下优化我的 mySql / PDO 查询的问题。

我是这样开发的:当我插入一个 iD(唯一/主要)时,我执行以下代码来找出特定表中最高的未使用id ,然后使用该 id($next_avail)进行插入。

在最后几天在stackoverflow上进行了简短的聊天后,我得到了 AUTO_INCREMENT 最适合此操作的想法。

但是现在,我意识到在大多数情况下,我也使用 $next_avail(AUTO_INCREMENT 的值)将其作为列插入其他表中。

所以我的代码对这些插入有意义。

我的问题是,下面的代码如何以速度为数百万行工作,因为我所做的每个插入都取决于它。

请写评论并要求我澄清这个问题中你不清楚的地方。

谢谢,阿德里安

$next_avail = 1 ;
                    $stmt = $db->prepare("SELECT news_id from mya_news ORDER BY news_id DESC LIMIT 1");
                    $stmt->execute();
                    while ( list($id) = $stmt->fetch(PDO::FETCH_BOTH) ) {                                                   
                        $next_avail = $id + 1;
                    }
4

2 回答 2

3

您不需要这样做,只需在表中使用 auto_increment,还可以使用 PHP 函数获取 last_inserted_idmysql_insert_id()

看看这个网站: http: //php.net/manual/en/function.mysql-insert-id.php

这个是 PDO http://php.net/manual/en/pdo.lastinsertid.php

于 2012-10-11T12:43:27.900 回答
2

可能使用 max 而不是对结果进行排序并使用限制。

然而,这是非常危险的。有可能 2 位处理将同时获得相同的 $next_avail。我建议更改插入行的顺序(或者甚至插入一个虚拟行以获取下一个 id,并稍后更新该行)以使用 AUTO_INCREMENT 列值

于 2012-10-11T12:47:19.853 回答