我在SQL服务器中有260列表。当我们运行“从表中选择计数(*)”时,它几乎需要5-6才能获得计数。表包含关闭的90-100百万条记录,包含260列,其中50%以上的列包含NULL。除此之外,用户还可以从UI构建动态sql查询到表,因此搜索90-100万条记录将需要时间来返回结果。有没有办法改进SQL表上的查找功能,其中过滤条件可以是任何东西,任何1建议我最快的方式获取25GB数据的聚合数据.Ui应该被绞死或超时
答案 0 :(得分:1)
调查horizontal partitioning。如果您可以强制用户将分区键放入谓词中,这实际上只会帮助查询性能。
尝试垂直分区,将一个260列的表拆分为多个列数较少的表。将所有通常需要的值放在一个表中。查询将仅引用包含所需列的表。这将为每页提供更多行,即每个查询的页数更少。
你有很多的NULL。 Sparse columns可能会有所帮助,但会计算您的百分比,因为如果不合适可能会造成伤害。对此有SO个问题。
如果数据库经常运行类似的查询,则过滤的索引和过滤的统计信息可能很有用。
答案 1 :(得分:0)
让我感动的是:
SOUNDEX
),则可以创建PERSISTED COMPUTED COLUMN
,以便不必每次都计算此值。@Twelfth评论非常好:
"我认为您需要创建一个ETL流程并开始将其更改为具有维度的事实表。"
答案 2 :(得分:0)
正如大家在评论中所述,您需要分析一些查询并查看哪些索引对您有所帮助。如果您的查询执行了大量搜索,则可以使用MSSQL服务器的全文搜索功能。 Here你会找到一个很好的例子。
答案 3 :(得分:0)
将我的评论改为答案......
您正在从记录这些9千万至1亿条记录的交易世界转变为数据仓库方案,您现在正在尝试对您拥有的信息进行切片,切块和分析。这不是一个简单的解决方案,但是你可能会达到当前系统可扩展到的极限。
在过去的工作中,我有几(6)个数据字段属于每个记录,这些数据字段几乎都是自由文本,并根据数据的生成位置随机填充(它们是搜索查询,人们正在输入他们基本上会输入的内容在谷歌)。有这样的6个字段...我创建了一个dim_text表,它在这6个表中的任何一个表中取出每个条目并用整数替换它。这给我留下了一个包含两列text_ID和text的表。每当用户在这6列中的任何一列中搜索特定条目时,我都会搜索我对此类查询进行优化(索引)的dim_search表,以返回与我想要的查询匹配的整数...我会接受整数并搜索6个字段中整数的所有occourence。搜索为这种类型的自由文本搜索高度优化的1个表,然后在主表中查询整数的实例比在此自由文本字段中搜索6个字段快得多。
我还会为您的公共聚合创建聚合表(如果您更喜欢该术语,则报告表)。您的业务设置将确定有很多选项...例如,如果每一行都是销售发票上的项目,并且您需要按日期显示销售额......最好按发票汇总总销售额并将其保存到表中,然后当用户想要按天计算总计时,会在发票的聚合上运行聚合以按天确定总计(因此您'部分'提前聚合了数据)。
希望这是有道理的......我确信在这里我需要进行多次编辑以澄清答案。