我们正在使用SQL Server
2005跟踪相当数量的不断传入的数据(每秒5-15次更新)。我们注意到,在生产几个月之后,其中一个表开始花费大量的时间进行查询。
该表有3列:
id
-自动编号(丛集)typeUUID
-在插入发生之前生成的GUID; 用于将类型分组在一起typeName
-类型名称(duh …)我们运行的查询之一是该typeName
字段上的一个查询:
SELECT DISTINCT [typeName] FROM [types] WITH (nolock);
该typeName
字段上具有非聚集,非唯一的升序索引。该表目前包含大约2亿条记录。当我们运行此查询时,该查询花了5m
58s返回!也许我们不了解索引的工作原理……但是我认为我们并没有对索引 有 太多误解。
为了进一步测试,我们运行了以下查询:
SELECT DISTINCT [typeName] FROM (SELECT TOP 1000000 [typeName] FROM [types] WITH (nolock)) AS [subtbl]
如我所料,此查询将在大约10秒钟内返回,它正在扫描表。
这里有我们想念的东西吗?为什么第一个查询要花这么长时间?
编辑: 抱歉,我的第一个查询返回了76条记录,谢谢您的支持。
跟进:
谢谢大家的回答,现在对我来说更有意义(我不知道为什么以前没有……)。没有索引,它将对200M行进行表扫描,而对于索引,则将对200M行进行索引扫描…
SQL
Server确实更喜欢索引,并且确实提高了性能,但是没有什么令人兴奋的。重建索引确实使查询时间减少到刚刚超过3m,而不是6m,这是一个改进,但还不够。我只是向我的老板建议我们规范化表结构。
再次感谢大家的帮助!
您确实误解了索引。即使它确实使用了索引,它仍将对200M个条目进行索引扫描。这将花费很长时间,加上执行DISTINCT所花费的时间(导致排序),而且运行起来很不好。在查询中看到DISTINCT总是会出现一个红色标记,并使我再次检查该查询。在这种情况下,也许您存在标准化问题?
本文向大家介绍针对Sqlserver大数据量插入速度慢或丢失数据的解决方法,包括了针对Sqlserver大数据量插入速度慢或丢失数据的解决方法的使用技巧和注意事项,需要的朋友参考一下 我的设备上每秒将2000条数据插入数据库,2个设备总共4000条,当在程序里面直接用insert语句插入时,两个设备同时插入大概总共能插入约2800条左右,数据丢失约1200条左右,测试了很多方法,整理出了两种效果比
问题内容: 更新进度条时对集合排序的最佳方法是什么?目前,我有这样的代码: 这显示进度,但是进度条随着项目数量的增加而减慢。有谁有更好的方法?理想情况下,我想使用类似于的接口,以便尝试不同的排序算法。 任何帮助将是巨大的! 作为背景,这段代码正在从Lucene撤回许多文档(1到1000万个),并在它们之上运行自定义比较器。通过将数据写回到磁盘上对它们进行排序将太慢而无法实用。大部分成本是从磁盘上读
使用JDBC驱动程序,我如何使用来自不同查询的多个结果集,而不不断地打开和关闭连接,因为我正在提取所需的w.e并将其传递给另一个方法。每次打开新的conn、语句和结果集时 我试图在一个方法中使用多个结果集,但它一直抛出异常,称结果集已关闭。我没有太多的SqlServver经验,所以任何指导都会有所帮助:-)
我正在通过Java查询一个MySQL数据库,从结果集中提取数据并将其放入DefaultTableModel,该Model被放入JTable,然后被放入JScrollPane中显示。 以下是该类的源代码:
最近,我从firebase实时数据库迁移到firebase firestore,因为它说查询的速度取决于从集合中检索的数据集的大小(文档数),而不是集合中的文档数。我检查了100、5000和10000个集合中不同数量的文档,在一次查询中检索了20个文档。我看到的是,当我从一个集合中的100个、5000个和10000个文档移动时,查询的结果时间增加了。为什么会这样?是因为firestore处于测试阶
问题内容: 我有大约700万行,其中有60列以上。数据超出了我的内存容量。我正在基于列“ A”的值将数据聚合到组中。熊猫拆分/汇总/合并的文档假定我已经将所有数据都存储在了,但是我无法将整个商店读取到内存中。在分组数据的正确方法是什么? 问题答案: 这是一个完整的例子。 输出量 一些警告: 1)如果您的组密度相对较低,则此方法很有意义。大约数百或数千个组。如果获得的收益更多,则效率更高(但方法更复