索引SQL数据库减慢了插入速度

时间:2017-06-24 10:58:20

标签: sql sql-server azure azure-sql-database

我有2个查询花了太长时间,在azure网站上运行它们时超时。

第一

INSERT INTO SEN.ValueTable (Value, OptId) 
SELECT Value, OptId FROM REF.ValueTable WHERE OptId = @optId

2D

python-twitter

两个SELECTS将始终返回7860个值。问题是我用不同的@optId做了大约10个这样的查询。首先我运行没有任何索引,然后第一个查询将不时地超时。然后我向SEN.ValueTable添加了一个非聚集索引,然后第二个查询开始超时。

来自Azure VM的第一个查询

来自Azure-WebApp的2d查询

我尝试通过.config文件增加超时时间,但是它们仍然在30秒内超时(客户没有时间限制,从sql-database中检索数据不会无论如何,应用程序的速度很慢。)

无论如何加速/消除超时?索引REF.ValueTable的速度会插入任何东西吗?

3 个答案:

答案 0 :(得分:2)

如果您真的运行了这样的查询:

SELECT Value, OptId
FROM REF.ValueTable
WHERE OptId = @optId;

最佳指数如下:

CREATE INDEX idx_ValueTable_OptId_Value
    ON REF.ValueTable (OptId)
    INCLUDE (Value);

任何索引都会降低插入速度,但会使读取查询受益。如果您想要更详细的答案,请发布更多详细信息 - 表格DDL和执行计划。

答案 1 :(得分:2)

首先,显而易见的解决方案是向SEN.ValueTable(OptId, Value)添加索引并在REF.ValueTable(OptId, Value)上没有索引。我认为这可以解决您的性能问题。

更重要的是,获取或插入7,860行应该不需要30秒 - 不是那样的。那么,还有什么呢? REF.ValueTable()上是否有触发器可能会减慢速度?还有其他限制吗?柱子特别宽吗?我的意思是,如果ValueVARCHAR(MAX)且通常为100 MB,则插入值可能是个问题。

答案 2 :(得分:0)