查询执行时间是否根据具有巨大 table 的不同查询参数值而有所不同?

Does query execution time differs based on different query param value with huge table?

我们正在使用 spring 启动、SQL 服务器和 Azure 云。

目标是在 table 中逐批更新 2000 条记录,其中有 52 百万行而不使用本机查询。

table 有一个外键,每个外键都有大量行,并按外键值分区。

示例 table,

seq |  id | value
-------------------
1   | A1  | v1  
2   | A1  | v2  
3   | B1  | v3
4   | B1  | v4

... 实际查询是,

select * from sample where id=? and value in (?) 
2 parameter will have 2000 strings.

using Spring data JPA repository methods.

A1 有 100K 条记录。 B1 有 400K 条记录。

当我使用 A1 和 2000 执行查询时 values.it 花了 17 秒来获取。 使用 B1 和另外 2000 个值(A1 没有)需要 70 秒才能从应用程序中获取。

但是当我在 SSM 中执行相同的查询时,只需要 3 秒。

是不是因为B1从400K/52M过滤,A1从100K/52M过滤?

连接字符串有,sendStringParametersAsUnicode=false;并且两列也有索引。

为每一行尝试了 CriteriaUpdate,但结果相同 - 2K/100K/52M 为 35 秒,2K/400K/52M 为 2 分钟。所以放弃它,现在尝试这个,一次获取所有并在 once.anyways 更新所有更新速度更快,只有获取需要时间。

注意: 我们没有为这个特定过程使用 spring 批处理,因为记录将从 Flatfile 中读取,并且文件中的每一行都必须在 table 中更新。所以有一个 reader 可以从文件中读取行,处理器按摩 DTO 并且作者试图这样做 update.chunk 大小 2000.

好的,它正在工作并且比 ever.Now 获取花费的时间更快。

我在 属性 文件中的 JDBC 连接字符串有 sendStringParametersAsUnicode=false;.

但它实际上是从没有它的 deployment.yaml 文件中选取的。

sendStringParametersAsUnicode=false;

文档,

If the sendStringParametersAsUnicode property is set to "true", String parameters are sent to the server in Unicode format.

If the sendStringParametersAsUnicode property is set to “false", String parameters are sent to the server in non-Unicode format such as ASCII/MBCS instead of Unicode.

The default value for the sendStringParametersAsUnicode property is "true".

Note: The sendStringParametersAsUnicode property is only checked when sending a parameter value with CHAR, VARCHAR, or LONGVARCHAR JDBC types. The new JDBC 4.0 national character methods, such as the setNString, setNCharacterStream, and setNClob methods of SQLServerPreparedStatement and SQLServerCallableStatement classes, always send their parameter values to the server in Unicode regardless of the setting of this property.

谢谢。