编辑:无论我做什么,伯爵似乎都行不通。我正在考虑一种不同的计算方法,我使用某种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行和5000行。
几乎所有时间我都无法加载页面。
还有更快的选择吗? 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];
}
答案 0 :(得分:3)
事情的真相是
COUNT(*) AS rowcount FROM table
是获得准确行数的最快方法。另一方面,如果你使用
COUNT(some_column) AS rowcount FROM table
它将计算具有非NULL列值的行数。这可能,但不一定是,愚蠢的全表扫描慢。
如果您碰巧使用MyISAM访问方法,COUNT(*)
应该非常快,因为该访问方法会跟踪计数。如果你正在使用InnoDB,它就不会那么快。但800K的记录并不是很多。
您可以从中受益
OPTIMIZE TABLE table
在这种情况下,COUNT(*)
非常慢。