gpt4 book ai didi

mysql - 计算大型数据库的替代方案

转载 作者:行者123 更新时间:2023-11-29 05:14:31 25 4
gpt4 key购买 nike

编辑:无论我做什么,计数似乎都不起作用。我正在考虑一种不同的计数方式,我使用某种 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(*) 非常慢。

关于mysql - 计算大型数据库的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35025273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com