【发布时间】:2012-03-16 09:50:36
【问题描述】:
我有一个超过 300 000 行的表,我需要为“id”列选择最大值。通常,我会这样做:
SELECT id FROM my_table ORDER BY id DESC
...但这会导致查询缓慢,我不想使用它。有没有不同的方法来解决这种情况? id 是自增主键。
稍后编辑:我的完整代码似乎写得很糟糕,因为我从你的 cmets 中扣除了。下面我发布了我正在工作的代码示例和表格。您能否建议一种将 table_x 的最后一个 ID+1 插入两个表(包括 table_x 本身)的正确方法。我不得不提一下,该脚本将运行不止一次。
TABLE_X TABLE_Y
------------ ----------
id_x | value id_y | id_x
------------ ----------
1 | A 1 | 3
2 | B
3 | C
<?php
for($i=0; $i<10; $i++){
$result_x = mysql_query('SELECT id_x FROM table_x ORDER BY id_x DESC');
$row_x = mysql_fetch_array($result_x);
$next = $row_x['id_x'] + 1;
mysql_query('INSERT INTO table_x(id_x) VALUES("'.$next.'")');
mysql_query('INSERT INTO table_y(id_x) VALUES("'.$next.'")');
}
?>
【问题讨论】:
-
嗯,
SELECT MAX(id) as id FROM my_table。 id 是一个 auto_increment PK,因此被索引,所以这应该非常快。 -
我需要知道最大的 ID 是多少才能插入值为 ID+1 的下一行
-
@CosminEpureanu 如果列是您所说的 auto_increment,则永远不需要手动计算值以插入新行。事实上,这样做会导致竞争条件。
-
@Michael,我需要在两个表中插入 ID。我修改了我的帖子,请看一下。