测试

场景

测试联合索引的效果。

建表语句

当然,你可以使用 SQL 查询和操作来实现这个目标。以下是一个示例的 SQL 脚本,可以在 MySQL 数据库中执行,来插入 100 万条数据并确保 user_id 相同:

-- 创建 user 表
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    user_name VARCHAR(255),
    user_status INT,
    INDEX idx_user_id (user_id)
);

-- 创建 user_ex 表
CREATE TABLE user_ex (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    remark TEXT,
    INDEX idx_user_id (user_id)
);

数据初始化

不依赖语言的方式,直接借助于 SQL 初始化 100W 条数据。

非常抱歉,我之前提供的 SQL 语句有一些错误。MySQL 不支持在普通 SQL 查询中使用 DECLAREWHILE 控制流语句。

对于此类任务,你可能需要使用存储过程或外部编程语言来实现。如果你不想使用编程语言,下面是一个使用存储过程的示例:

-- 创建存储过程来插入数据
DELIMITER //

CREATE PROCEDURE InsertTestData()
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i <= 100000 DO
        INSERT INTO user (user_id, user_name, user_status)
        VALUES (i, 'name', i % 8);

        INSERT INTO user_ex (user_id, remark)
        VALUES (i, 'remark');
        
        SET i = i + 1;
    END WHILE;
END //

DELIMITER ;

-- 调用存储过程
CALL InsertTestData();

-- 删除存储过程
DROP PROCEDURE IF EXISTS InsertTestData;

这个示例使用了存储过程 InsertTestData 来插入数据。你可以在 MySQL 客户端中执行这些语句。这些语句将创建存储过程、插入数据,然后删除存储过程。这个方法依然是基于编程的,但是不需要外部编程语言,而是使用了 MySQL 内部的存储过程功能。

TODO….

测试验证, 根据实际效果+测试数据验证。

参考资料

NONE