替代庞大的数据库替代

时间:2016-01-26 22:29:04

标签: mysql count

编辑:无论我做什么,伯爵似乎都行不通。我正在考虑一种不同的计算方法,我使用某种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];

}

1 个答案:

答案 0 :(得分:3)

事情的真相是

  COUNT(*) AS rowcount FROM table

是获得准确行数的最快方法。另一方面,如果你使用

 COUNT(some_column) AS rowcount FROM table

它将计算具有非NULL列值的行数。这可能,但不一定是,愚蠢的全表扫描慢。

如果您碰巧使用MyISAM访问方法,COUNT(*)应该非常快,因为该访问方法会跟踪计数。如果你正在使用InnoDB,它就不会那么快。但800K的记录并不是很多。

您可以从中受益

 OPTIMIZE TABLE table

在这种情况下,COUNT(*)非常慢。