greenplum查询的实际成本在哪里? 我有一个简单的sql查询,在SQL Server上返回80毫秒,在greenplum上返回1500毫秒!!!
“解释分析”显示“总执行时间:55ms”,但是事实并非如此,我尝试使用odbc dirver或psql客户端连接到(greenplum)数据库,查询成本稳定在1500ms。
每个表上的数据不超过10K,已分区且没有歪斜(无索引)。所有节点(主节点/分段)的CPU / IO /内存/元组平均低于10%。
问题:
SQL:
@bot.command(pass_context=True)
@commands.check(user_is_me)
async def hello(cxt):
await bot.say('Hello')
执行计划(无索引):
SELECT CoreHR_EmploymentRecord.ChangeTypeOID AS CoreHR_EmploymentRecord_ChangeTypeOID,
MAX(CoreHR_EmploymentRecord.ChangeTypeAlias) AS CoreHR_EmploymentRecord_ChangeTypeAlias,
COUNT(DISTINCT CoreHR_EmployeeInformation.UserID) AS CoreHR_EmployeeInformation_Count_UserID
FROM CoreHR_EmployeeInformation WITH (NOLOCK)
LEFT JOIN CoreHR_EmploymentRecord WITH (NOLOCK)
ON CoreHR_EmployeeInformation.TenantId = CoreHR_EmploymentRecord.TenantId
AND CoreHR_EmployeeInformation.UserID = CoreHR_EmploymentRecord.UserID
AND CoreHR_EmploymentRecord.TenantId = 106996
WHERE CoreHR_EmployeeInformation.TenantId = 106996
AND (CoreHR_EmploymentRecord.IsCurrentRecord = 1)
AND (CoreHR_EmploymentRecord.StartDate
BETWEEN '2018-05-24 00:00:00' AND '2018-06-22 23:59:59.998'
)
AND CoreHR_EmployeeInformation.ApprovalStatus IN
(
SELECT * FROM dbo.f_SplitToVarchar(4, ',')
)
GROUP BY CoreHR_EmploymentRecord.ChangeTypeOID
ORDER BY CoreHR_EmploymentRecord.ChangeTypeOID ASC;
答案 0 :(得分:1)
Greenplum数据库执行非常快速的顺序扫描;索引使用随机查找模式在磁盘上定位记录。
Greenplum数据分布在各个段中,因此每个段扫描总数据的一小部分以获得结果。使用表分区,要扫描的总数据可能会更小。
由于商业智能查询工作负载通常返回非常大的数据集,因此使用索引效率不高。
首先尝试不添加索引的查询工作量。
您使用的是ORCA还是LEGACY PLANNER?
关于时间问题-
您是从哪里产生时间的?远程客户端?还是从PSQL控制台? EXPLAIN ANALYZE显示飞行中查询的实际处理时间。
您需要发布EXPLAIN ANALYZE才能对计划进行任何真正的分析。