Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 是否有一种更快的替代方案来替代“报价”;分组方式;Netezza的聚合?_Sql_Netezza_Spatial Query_Date Histogram - Fatal编程技术网

Sql 是否有一种更快的替代方案来替代“报价”;分组方式;Netezza的聚合?

Sql 是否有一种更快的替代方案来替代“报价”;分组方式;Netezza的聚合?,sql,netezza,spatial-query,date-histogram,Sql,Netezza,Spatial Query,Date Histogram,这是我要执行的最小查询语句 select count(*) from temper_300_1 group by onegid; 不过,我也有“where”条款。我试图做的是构建一个直方图查询,并确定具有特定“onegid”的元素数。查询8亿行大约需要7秒钟。有人能提出一个更快的替代方案或优化方案吗 我实际上是想从由纬度和经度组成的空间数据中绘制热图,我为每个元素分配了一个网格id,但“按聚合分组”在时间上花费相当大。你不会比按聚合分组快多少,尽管当前查询不会显示与每个计数关联的组项目

这是我要执行的最小查询语句

    select count(*) from temper_300_1 group by onegid;
不过,我也有“where”条款。我试图做的是构建一个直方图查询,并确定具有特定“onegid”的元素数。查询8亿行大约需要7秒钟。有人能提出一个更快的替代方案或优化方案吗


我实际上是想从由纬度和经度组成的空间数据中绘制热图,我为每个元素分配了一个网格id,但“按聚合分组”在时间上花费相当大。

你不会比按聚合分组快多少,尽管当前查询不会显示与每个计数关联的组项目

确保表中正确分布了

select datasliceid, count(1) from temper_300_1 group by onegid;
计数应该大致相等。如果没有,DBA需要在更好的分发键上重新分发表


如果是,您可以要求DBA在该特定列上创建一个按该列排序的。您可能会看到一些性能改进。

我想说的是,与查询相关的性能有两个主要考虑因素:分布和行大小/数据块密度

分布:

正如@JeremyTwFuture所提到的,数据的分布要均匀,不存在偏差,这一点很重要。在Netezza这样的MPP系统中,您的速度仅与最慢的数据片一样快,如果一个数据片的数据量是其他数据片的10倍,则可能会降低性能

另一个分发注意事项是,如果您的表尚未在onegid上分发,则当查询运行以支持您的GROUP BY onegid子句时,它将在onegid上动态重新分发。这将发生在分组BY和带有分区BY的窗口聚合上。如果onegid值的分布不相对均匀,则可能会面临处理偏差

如果您的表已经分布在onegid上,并且您不提供任何其他WHERE谓词,那么您可能已经从该角度进行了优化配置

行大小/范围密度

当Netezza读取数据以支持您的查询时,每个数据片将以3 MB的数据块读取其磁盘。如果您的行远远大于onegid值,则从磁盘读取的数据将超过回答查询所需的数据量。如果您的表很大,您的行比“强”> OnGeID更宽,查询时间性能是最重要的,那么您可以考虑创建一个物化视图,如:
CREATE MATERIALIZED VIEW temper_300_1_mv AS select onegid from temper_300_1 ORDER BY onegid;
当您在SELECT子句中仅使用onegid对TEMPLATE_300_1执行查询时,优化器将仅引用物化视图,它将能够将更多行打包到给定的3MB范围中。这可以显著提高性能


MVIEW creation语句中的ORDER BY子句还可能提高MVIEW压缩的有效性,进一步减少保存给定行数所需的扩展数据块数量,并进一步提高性能。

表是否正确索引?mysql是否允许使用足够的RAM将整个索引保存在内存中?此操作将获得相关表格信息:
SHOW CREATE table template\u 300\u 1\G