【发布时间】:2015-09-24 13:24:21
【问题描述】:
我目前在 zumero 同步数据库上经历了非常长的同步时间(超过一分钟),经过一些分析,罪魁祸首似乎是一个需要 20 多秒的特定查询(适当地匿名):
WITH relevant_rvs AS
(
SELECT rv.z_rv AS rv FROM zumero."mydb_089eb7ec0e2e4772ba0dde90170ee368_mysynceddb$z$rv$271340031" rv
WHERE (rv.txid<=913960)
AND NOT EXISTS (SELECT 1 FROM zumero."mydb_089eb7ec0e2e4772ba0dde90170ee368_mysynceddb$z$dd$271340031" dd WHERE dd.rv=rv.z_rv AND (dd.txid<=913960))
)
INSERT INTO #final_included_271340031_e021cfbe1c97213dd5adbacd667c08439fb8c6 (z_rv)
SELECT z$this.z_rv
FROM zumero."mydb_089eb7ec0e2e4772ba0dde90170ee368_mysynceddb$z$271340031" z$this
WHERE (z$this.z_rv IN (SELECT rv FROM relevant_rvs))
AND MyID = (MyID = XXX AND MyOtherField=XXX)
UNION SELECT z$this.z_rv
FROM zumero."mydb_089eb7ec0e2e4772ba0dde90170ee368_mysynceddb$z$old$271340031" z$this
WHERE (z$this.z_rv IN (SELECT rv FROM relevant_rvs))
AND (MyID = XXX AND MyOtherField=XXX)
我已获取查询的后 SELECT 部分并单独运行它,这重现了同样糟糕的性能。有趣的是,执行计划建议应用索引,但我不愿意更改 zumero 生成表的架构,是否可以安全地尝试向这些表中添加索引并且可能会有所帮助?
源表中有 100,000 条记录,过滤器导致每个客户端同步 100-1000 条记录,因此数据量不是微不足道的,但我认为不会在查询性能方面造成重大问题的级别。
有人有优化 Zumero 同步性能服务器端的经验吗?源表上的任何索引是否会传播到这些表?在这种情况下,它们似乎没有。
【问题讨论】:
-
好奇 - 执行计划建议的索引是什么?
-
@PaulRoub
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [zumero].[mydb_089eb7ec0e2e4772ba0dde90170ee368_mysynceddb$z$old$271340031] ([MyID],[MyOtherField]) INCLUDE ([z_rv])
标签: sql-server zumero