Presto运行速度比SQL Server慢

时间:2018-11-20 16:46:37

标签: sql-server presto

在Presto中配置了SQL Server连接器,并尝试了一些简单的查询,例如:

Select count(0) from table_name

Select sum(column_name) from table_name

以上两种查询均在300毫秒内在SQL Server中运行,并在Presto中运行3分钟以上。

这是第二个查询的解释分析(它似乎进行表扫描并在求和之前获取大量数据),为什么它不能将求和运算符下推到SQL Server本身。

    Query Plan                                                       
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Fragment 1 [SINGLE]                                                                                                                                                      
     Cost: CPU 2.98ms, Input: 1 row (9B), Output: 1 row (9B)                                                                                                              
     Output layout: [sum]                                                                                                                                                 
     Output partitioning: SINGLE []                                                                                                                                       
     - Aggregate(FINAL) => [sum:double]                                                                                                                                   
             Cost: ?%, Output: 1 row (9B)                                                                                                                                 
             Input avg.: 1.00 lines, Input std.dev.: 0.00%                                                                                                                
             sum := "sum"("sum_4")                                                                                                                                        
         - LocalExchange[SINGLE] () => sum_4:double                                                                                                                       
                 Cost: ?%, Output: 1 row (9B)                                                                                                                             
                 Input avg.: 0.06 lines, Input std.dev.: 387.30%                                                                                                          
             - RemoteSource[2] => [sum_4:double]                                                                                                                          
                     Cost: ?%, Output: 1 row (9B)                                                                                                                         
                     Input avg.: 0.06 lines, Input std.dev.: 387.30%                                                                                                      

 Fragment 2 [SOURCE]                                                                                                                                                      
     Cost: CPU 1.67m, Input: 220770667 rows (1.85GB), Output: 1 row (9B)                                                                                                  
     Output layout: [sum_4]                                                                                                                                               
     Output partitioning: SINGLE []                                                                                                                                       
     - Aggregate(PARTIAL) => [sum_4:double]                                                                                                                               
             Cost: 0.21%, Output: 1 row (9B)                                                                                                                              
             Input avg.: 220770667.00 lines, Input std.dev.: 0.00%                                                                                                        
             sum_4 := "sum"("total_base_dtd")                                                                                                                             
         - TableScan[sqlserver:sqlserver:table_name:ivpSQLDatabase:table_name  ..
                 Cost: 99.79%, Output: 220770667 rows (1.85GB)                                                                                                            
                 Input avg.: 220770667.00 lines, Input std.dev.: 0.00%                                                                                                    
                 total_base_dtd := JdbcColumnHandle{connectorId=sqlserver, columnName=total_base_dtd, columnType=double}

2 个答案:

答案 0 :(得分:1)

两个示例查询都是产生单行结果的聚合查询。 当前,在Presto中无法将聚合下推到基础数据存储。条件和列选择(缩小的预测)被下推,但聚合没有被下推。

因此,当您从Presto查询SQL Server时,Presto需要读取所有数据(从给定列中)以进行聚合,因此存在大量磁盘和网络流量。另外,可能是SQL Server可以优化某些聚合,因此它可能根本跳过了读取的数据(我在这里猜测)。

Presto不适合作为某些其他数据库的前端。可以原样使用它,但这有一定的含义。当Presto作为大数据查询引擎(通过S3,HDFS或其他对象存储)或联合查询引擎(您在其中组合来自多个数据存储/连接器的数据)使用时,它会大放异彩。

答案 1 :(得分:1)

Presto不支持聚合下拉菜单,但是作为一种变通办法,您可以在源数据库(在您的情况下为SQL Server)中创建视图,然后从Presto中查询这些视图。