编辑:无论我做什么,计数似乎都不起作用。我正在考虑一种不同的计数方式,我使用某种 SQL 查询来重新编译所有行 id。
我的意思是什么? 示例数据库:
ID - First Name
----------------
1 - John
3 - Joe
4 - Sal
9 - Murry
看到它跳过了 2,5,6,7,8,因为这些行已被删除。是否可以重置所有当前行 ID 并自动递增它们?如果是这样,那么我可以这样做:
SELECT id FROM table ORDER BY id DESC LIMIT 1
,这应该需要几秒钟,如果我不删除任何记录,它也应该非常精确。
Count(*)
在我的数据库上运行速度非常慢,大约有 800'000 行。
几乎所有时候我都无法加载页面。 有没有更快的替代方案?
Count(1)
没有区别。
这是我的 PHP:
这是计数功能:
//Create a new function named query;
function countrows($sql = false,$dbname = false,$obj = false) {
//Prepare The SQL Query;
$query = Connect('localhost','shinymk_admin','password',$dbname)->prepare($sql);
$res = true;
//Execute Binded Query;
try { $query->execute(); $count = $query->fetch(PDO::FETCH_NUM); }
catch (PDOException $e) {
$count = false;
}
//If no errors happened Make $row true;
return $count[0];
}
事情的真相是这样的
COUNT(*) AS rowcount FROM table
是获得准确行数的最快方法。另一方面,如果您使用
COUNT(some_column) AS rowcount FROM table
它将计算具有非 NULL 列值的行数。这可能但不一定是愚蠢的全表扫描慢。
如果您碰巧使用 MyISAM 访问方法,
COUNT(*)
应该非常快,因为该访问方法会跟踪计数。 如果你使用 InnoDB,它不会那么快。 但 800K 条记录并不是很多。
您可能会从中受益
OPTIMIZE TABLE table
在这种情况下,
COUNT(*)
非常慢。
优化表 给我带来了巨大的改变 谢谢谢谢