programing

MSSQL과 Maria 간의 인덱스 차이DB

powerit 2023. 10. 25. 23:49
반응형

MSSQL과 Maria 간의 인덱스 차이DB

MSSQL 데이터베이스를 MariaDB로 포팅하고 있는데 HeidiSQL에서 생산한 완전한 SQL 덤프를 가지고 있습니다.MSSQL 데이터베이스에는 다음과 같이 선언된 여러 인덱스가 있습니다.

    UNIQUE KEY ("JobCodeId","Rate")

제가 가정하는 바는 다음과 같습니다.

    UNIQUE INDEX (`JobCodeId`,`Rate`)

그러나 동일한 SQL에서 JobCodeId와 Rate에 대해 동일한 값을 가진 삽입물이 많이 존재합니다. 이는 제가 이해하지 못할 때 위의 내용이 동일한 JobCodeId와 Rate를 공유하는 두 개의 레코드가 있을 수 없다는 것을 의미하지만 MSSQL 테이블에는...MariaDB가 허락하지 않을 것이고 나는 그 이유를 이해하는데, 무엇이 다른가요?

MSSQL 테이블 정의는 다음과 같습니다.

    CREATE TABLE IF NOT EXISTS "Activity" (
"ActivityId" BIGINT(19,0) NOT NULL,
"JobCodeId" BIGINT(19,0) NOT NULL,
"ActivityDetailId" SMALLINT(5,0) NOT NULL,
"Rate" SMALLMONEY(10,4) NULL DEFAULT NULL,
"CreationDateTime" DATETIME(3) NOT NULL DEFAULT (getdate()),
"DisabledDateTime" DATETIME(3) NULL DEFAULT NULL,
UNIQUE KEY ("ActivityDetailId"),
PRIMARY KEY ("ActivityId"),
UNIQUE KEY ("JobCodeId","Rate")

);

그리고 여기 처음 몇 개의 삽입물이 있습니다.

    INSERT INTO "Activity" ("ActivityId", "JobCodeId", "ActivityDetailId", "Rate", "CreationDateTime", "DisabledDateTime") VALUES
(19, 31, 8, 35, '2011-09-15 10:54:02.630', NULL),
(20, 31, 10, 42, '2011-09-15 10:54:35.907', NULL),
(21, 31, 11, 42, '2011-09-15 10:54:55.580', NULL);

MariaDB의 수정된 SQL은 다음과 같습니다.

    CREATE TABLE IF NOT EXISTS "Activity" (
"ActivityId" BIGINT(20) NOT NULL,
"JobCodeId" BIGINT(20) NOT NULL,
"ActivityDetailId" SMALLINT(5) NOT NULL,
"Rate" NUMERIC(15,4) NULL DEFAULT NULL,
"CreationDateTime" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
"DisabledDateTime" DATETIME NULL DEFAULT NULL,
UNIQUE INDEX ("ActivityDetailId"),
PRIMARY KEY ("ActivityId"),
UNIQUE INDEX ("JobCodeId","Rate")

);

작업을 수행하려고 하면 MariaDB가 오류를 발생시키는데, 이는 정의를 고려할 때 예상되는 오류입니다. MSSQL에서는 왜 그리고 어떻게 작동합니까?

언급URL : https://stackoverflow.com/questions/33268579/indexes-differences-between-mssql-and-mariadb

반응형