Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在具有多行(3亿行)的表上使用count(*)查询的性能_Sql_Sql Server_Performance_Sqlite - Fatal编程技术网

Sql 在具有多行(3亿行)的表上使用count(*)查询的性能

Sql 在具有多行(3亿行)的表上使用count(*)查询的性能,sql,sql-server,performance,sqlite,Sql,Sql Server,Performance,Sqlite,我知道使用sqlite有局限性,但我想知道它是否能够处理这种情况 我的表有超过3亿条记录,数据库容量约为12千兆。使用sqlite的数据导入util既漂亮又快速。但后来我在这个表的一个字符串列中添加了一个索引,它运行了一整夜来完成这个操作。我没有把它和其他数据库进行比较,但对我来说似乎很慢 现在添加了索引,我想在数据中查找重复项。所以我尝试运行一个“havingcount>0”查询,它似乎也需要几个小时。我的查询如下所示: select col1, count(*) from table1 g

我知道使用sqlite有局限性,但我想知道它是否能够处理这种情况

我的表有超过3亿条记录,数据库容量约为12千兆。使用sqlite的数据导入util既漂亮又快速。但后来我在这个表的一个字符串列中添加了一个索引,它运行了一整夜来完成这个操作。我没有把它和其他数据库进行比较,但对我来说似乎很慢

现在添加了索引,我想在数据中查找重复项。所以我尝试运行一个“havingcount>0”查询,它似乎也需要几个小时。我的查询如下所示:

select col1, count(*) 
from table1
group by col1
having count(*) > 1
我假设这个查询会在col1上使用我的索引,但是查询执行速度慢让我怀疑它是否不是

sql server是否能更好地处理此类问题

但后来我给这个表中的一个字符串列添加了一个索引,它运行了一整夜来完成这个任务 活动我没有把它和其他数据库进行比较,但对我来说似乎很慢

我不想告诉你,但是你的服务器看起来怎么样?没有争议,但这可能是一项非常需要解决的操作,可能需要大量IO,而普通计算机或硬盘速度较慢的chehap web服务器不适合进行大量数据库工作。我运行数百og千兆字节数据库项目工作,我最小的“大数据”服务器有2个SSD和8个Velociraptor用于数据和日志。最大的一个有3个存储节点,共有1000gb SSD光盘,这仅仅是因为IO是db服务器赖以生存和呼吸的东西

所以我尝试运行一个“havingcount>0”查询,它似乎也需要几个小时

多少公羊?足够将其全部放在内存中,还是一个内存不足的虚拟服务器,丢失的内存会导致坏IO?SqlLite可以/使用多少内存?临时设置如何?在记忆中?Sql server可能会使用大量内存/tempdb空间来执行这种类型的检查

但后来我给这个表中的一个字符串列添加了一个索引,它运行了一整夜来完成这个任务 活动我没有把它和其他数据库进行比较,但对我来说似乎很慢

我不想告诉你,但是你的服务器看起来怎么样?没有争议,但这可能是一项非常需要解决的操作,可能需要大量IO,而普通计算机或硬盘速度较慢的chehap web服务器不适合进行大量数据库工作。我运行数百og千兆字节数据库项目工作,我最小的“大数据”服务器有2个SSD和8个Velociraptor用于数据和日志。最大的一个有3个存储节点,共有1000gb SSD光盘,这仅仅是因为IO是db服务器赖以生存和呼吸的东西

所以我尝试运行一个“havingcount>0”查询,它似乎也需要几个小时


多少公羊?足够将其全部放在内存中,还是一个内存不足的虚拟服务器,丢失的内存会导致坏IO?SqlLite可以/使用多少内存?临时设置如何?在记忆中?Sql server可能会使用大量内存/tempdb空间进行此类检查。

通过
PRAGMA cache\u size=
增加sqlite缓存。使用的内存是
。(可通过
PRAGMA page\u size=
设置)

通过将这些值分别设置为16000和32768(或大约512MB),我能够将这个程序的大容量负载从20分钟降低到2分钟。(虽然我认为如果系统上的磁盘不是那么慢,这可能不会有太大的影响)


但是,在较小的嵌入式平台上,您可能没有这些额外的内存可用,我不建议像在这些平台上那样增加内存,但对于台式机或笔记本电脑级系统,这会有很大帮助。

通过
PRAGMA cache\u size=
增加sqlite缓存。使用的内存是
。(可通过
PRAGMA page\u size=
设置)

通过将这些值分别设置为16000和32768(或大约512MB),我能够将这个程序的大容量负载从20分钟降低到2分钟。(虽然我认为如果系统上的磁盘不是那么慢,这可能不会有太大的影响)

但是,在较小的嵌入式平台上,您可能没有这些额外的内存可用,我不建议像在这些平台上那样增加内存,但对于台式机或笔记本电脑级别的系统,它会有很大的帮助。

SQLite的
count()
没有经过优化-即使索引,它也会进行全表扫描。这是你的电话号码。运行以验证,您将看到:

EXPLAIN QUERY PLAN SELECT COUNT(FIELD_NAME) FROM TABLE_NAME;
我得到这样的东西:

0|0|0|SCAN TABLE TABLE_NAME (~1000000 rows)
SQLite的
count()。这是你的电话号码。运行以验证,您将看到:

EXPLAIN QUERY PLAN SELECT COUNT(FIELD_NAME) FROM TABLE_NAME;
我得到这样的东西:

0|0|0|SCAN TABLE TABLE_NAME (~1000000 rows)

您是否尝试过检查索引以查看是否使用了索引?无论如何,12千兆字节只是数据,索引应该是额外的几千兆字节。我认为与其他替代方案相比,SQLite的性能可能太差了,尽管理论上是140 TB。事实上我忘了提到,索引后文件的大小基本上翻了一番-从12gb到24GB。我将运行explain tho并查看,谢谢。您是否尝试检查以查看是否使用了索引?无论如何,12千兆字节只是数据,索引应该是额外的几千兆字节。我认为与其他替代方案相比,SQLite的性能可能太差了,尽管理论上是140 TB。实际上我忘了提到,索引从12gb增加到24GB后,文件的大小基本上翻了一番。我将运行explain tho并查看,感谢大容量加载足够快,索引和重复数据消除查询现在成了问题大容量加载足够快,索引和重复数据消除查询现在成了问题我看到它没有填充ram(我有8个GIG),而且它似乎没有做很多io。它似乎只是在消耗处理器。。。这很奇怪,完全不是。你打算做大量的手术