Trong SQL Server, ...
Sp:
CREATE PROCEDURE insertToTable
@field1 VARCHAR(256), @field2 varchar(256), @field3 varchar(256)
AS
BEGIN
SET NOCOUNT ON
IF NOT EXISTS (SELECT * FROM my_table WHERE field1 = @field1)
INSERT INTO my_table
(field1, field2, field3)
VALUES (@field1, @field2, @field3);
ELSE
THROW 50000, 'xxxxxx', 1;
END
GO
Bàn:
CREATE TABLE my_table (
field1 VARCHAR(256) NOT NULL,
field2 VARCHAR(256) NOT NULL,
field3 VARCHAR(256) NOT NULL
);
CREATE INDEX idx_field1 ON my_table(field1);
cái trên nhanh hơn cái dưới?
Sp:
CREATE PROCEDURE insertToTable
@field1 VARCHAR(256), @field2 varchar(256), @field3 varchar(256)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO my_table
(field1, field2, field3)
VALUES (@field1, @field2, @field3);
GO
Bàn:
CREATE TABLE my_table (
field1 VARCHAR(256) NOT NULL,
field2 VARCHAR(256) NOT NULL,
field3 VARCHAR(256) NOT NULL
);
CREATE UNIQUE INDEX idx_field1 ON my_table(field1);
Đầu vào mẫu:
trường1: F56yCgZ9AEm9aFpTyjwhERtqNeglYEow trường2: trường3: A18E9049117A77E6A4D41C6CA3FFDEA65D842BF1F57705405B4E66969531D93D
Đầu vào được tạo ra một cách nhanh chóng bởi ứng dụng web và sử dụng các câu lệnh được chuẩn bị. Tôi sử dụng Jmeter để tạo yêu cầu cho ứng dụng web của mình.
Với UNIQUE
chỉ mục, hiệu suất chèn giảm xuống sau khi chèn 100K và trở nên tồi tệ hơn.
Với NON UNIQUE
chỉ mục và kiểm tra thủ công với IF NOT EXISTS SELECT
, hiệu suất là không đổi ngay cả với hàng triệu bản ghi được chèn vào.
Các giá trị đủ độc đáo để không bao giờ có sự trùng lặp được tạo. Ngay cả sau một vài triệu giá trị được chèn vào.