PHP从MySQL表中选择最大的`id`值

时间:2012-02-26 19:18:05

标签: php mysql select

我有一个超过300 000行的表格,我需要选择列的最高值' id'。通常,我会这样做:

SELECT id FROM my_table ORDER BY id DESC

...但这会导致查询速度慢,我不想使用它。有没有不同的方法来解决这种情况? id是自动增量和主键。

稍后编辑:我的完整代码似乎写得很糟糕,正如我从您的评论中扣除的那样。下面我发布了一份工作代码示例和表格。你能否建议一种正确的方法将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.'")');
}
?>

5 个答案:

答案 0 :(得分:14)

稍微好一些:

SELECT id FROM my_table ORDER BY id DESC LIMIT 1

明显更好:

SELECT MAX(id) FROM my_table

答案 1 :(得分:3)

这是您必须使用的正确代码。

mysql_query('INSERT INTO table_x(id_x) VALUES(NULL)');
$id = mysql_insert_id();
mysql_query("INSERT INTO table_y(id_x) VALUES($id)");

答案 2 :(得分:1)

视情况而定

SELECT id FROM my_table ORDER BY id DESC LIMIT 1
PHP中的

mysql_insert_id()或MySQL中的(SELECT LAST_INSERT_ID()

答案 3 :(得分:0)

正如其他人所说,你应该使用MAX运算符:

SELECT MAX( id ) FROM my_table ORDER BY id DESC

作为一般经验法则,始终减少从数据库返回的记录数量。在结果集上运行时,数据库总是比应用程序更快

如果查询速度较慢,请尝试EXPLAIN

EXPLAIN  SELECT id FROM my_table ORDER BY id DESC

VS

EXPLAIN  SELECT MAX( id ) FROM my_table ORDER BY id DESC

EXPLAIN询问MySQL的查询优化器如何查看查询。查看文档,了解如何阅读其输出。

PS:我真的很想知道,为什么你需要MAX(id)。即使你的应用程序从数据库中获取了值,它也是无用的:另一个进程可能只是在下一个CPU周期中插入了一条新记录 - MAX(id)不再有效。

答案 4 :(得分:-1)

我猜它很慢,因为你检索了所有30万行。将LIMIT 1添加到查询中。

SELECT id FROM my_table ORDER BY id DESC LIMIT 1

或使用MAX()运算符。