我有一个超过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.'")');
}
?>
答案 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()运算符。