Skip to content

Commit fa6a79d

Browse files
authored
Use NVARCHAR for SQL Server
I observed that the SQL Server DDL for Spring Integration metadata tables defines several critical key columns (e.g., REGION, GROUP_KEY, METADATA_KEY) using the VARCHAR data type. This configuration creates a type mismatch because the Microsoft JDBC Driver, by default, sends string parameters to SQL Server using the Unicode (NVARCHAR) data type. Potential Impact and Optimization: This mismatch necessitates an Implicit Conversion by SQL Server on nearly every lookup. While functional, this conversion can severely compromise the database's ability to utilize indexes optimally. In high-frequency queries involving these key columns, this often forces the database to revert from efficient Index Seek to less efficient Index Scan or Table Scan. We propose adjusting the relevant VARCHAR columns in the DDL to NVARCHAR. This structural alignment eliminates the potential for implicit conversion, ensuring the DDL is consistent with the parameters sent by the MS JDBC driver, and guaranteeing optimal index utilization. Signed-off-by: Chienlin <[email protected]>
1 parent ba83769 commit fa6a79d

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

spring-integration-jdbc/src/main/resources/org/springframework/integration/jdbc/schema-sqlserver.sql

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CREATE TABLE INT_MESSAGE (
22
MESSAGE_ID CHAR(36) NOT NULL,
3-
REGION VARCHAR(100) NOT NULL,
3+
REGION NVARCHAR(100) NOT NULL,
44
CREATED_DATE DATETIME NOT NULL,
55
MESSAGE_CONTENT IMAGE,
66
constraint INT_MESSAGE_PK primary key (MESSAGE_ID, REGION)
@@ -11,14 +11,14 @@ CREATE INDEX INT_MESSAGE_IX1 ON INT_MESSAGE (CREATED_DATE);
1111
CREATE TABLE INT_GROUP_TO_MESSAGE (
1212
GROUP_KEY CHAR(36) NOT NULL,
1313
MESSAGE_ID CHAR(36) NOT NULL,
14-
REGION VARCHAR(100),
14+
REGION NVARCHAR(100),
1515
constraint INT_GROUP_TO_MESSAGE_PK primary key (GROUP_KEY, MESSAGE_ID, REGION)
1616
);
1717

1818
CREATE TABLE INT_MESSAGE_GROUP (
1919
GROUP_KEY CHAR(36) NOT NULL,
20-
REGION VARCHAR(100) NOT NULL,
21-
GROUP_CONDITION VARCHAR(255),
20+
REGION NVARCHAR(100) NOT NULL,
21+
GROUP_CONDITION NVARCHAR(255),
2222
COMPLETE BIGINT,
2323
LAST_RELEASED_SEQUENCE BIGINT,
2424
CREATED_DATE DATETIME NOT NULL,
@@ -28,7 +28,7 @@ CREATE TABLE INT_MESSAGE_GROUP (
2828

2929
CREATE TABLE INT_LOCK (
3030
LOCK_KEY CHAR(36) NOT NULL,
31-
REGION VARCHAR(100) NOT NULL,
31+
REGION NVARCHAR(100) NOT NULL,
3232
CLIENT_ID CHAR(36),
3333
CREATED_DATE DATETIME NOT NULL,
3434
EXPIRED_AFTER DATETIME NOT NULL,
@@ -44,7 +44,7 @@ CREATE TABLE INT_CHANNEL_MESSAGE (
4444
MESSAGE_PRIORITY BIGINT,
4545
MESSAGE_SEQUENCE BIGINT NOT NULL ,
4646
MESSAGE_CONTENT IMAGE,
47-
REGION VARCHAR(100) NOT NULL,
47+
REGION NVARCHAR(100) NOT NULL,
4848
constraint INT_CHANNEL_MESSAGE_PK primary key (REGION, GROUP_KEY, CREATED_DATE, MESSAGE_SEQUENCE)
4949
);
5050

@@ -54,8 +54,8 @@ CREATE INDEX INT_CHANNEL_MSG_DELETE_IDX ON INT_CHANNEL_MESSAGE (REGION, GROUP_KE
5454

5555

5656
CREATE TABLE INT_METADATA_STORE (
57-
METADATA_KEY VARCHAR(255) NOT NULL,
58-
METADATA_VALUE VARCHAR(4000),
59-
REGION VARCHAR(100) NOT NULL,
57+
METADATA_KEY NVARCHAR(255) NOT NULL,
58+
METADATA_VALUE NVARCHAR(4000),
59+
REGION NVARCHAR(100) NOT NULL,
6060
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
6161
);

0 commit comments

Comments
 (0)