基础表上直接去存(没有改变表的引擎为innodb)
-- 创建存储过程 CREATE PROCEDURE test_insert() BEGIN -- 定义一个属性 DECLARE i INT DEFAULT 0; WHILE i<=100000000 DO INSERT m_user (add_time,channel_code,is_stat,identification) VALUES ('2021-12-08 13:48:41','宋佳豪',1,'zsn'); SET i=i+1; END WHILE; commit; END; CALL test_insert();
看一下时间,我是醉了,等了我一天多还没跑完。我人傻了,决定不要再追这个爱情了。
所以我决定找原因了。
我用myIsAm引擎去存一亿数据试试看,我原来用的是innodb是因为事务的关系存起来会慢很多,查阅资料是mysiam没有事务存起来会极快,我试试!
USE test; DROP TABLE IF EXISTS test_user; CREATE TABLE test_user( id BIGINT(20) PRIMARY KEY NOT NULL AUTO_INCREMENT, username VARCHAR(11) DEFAULT NULL, gender VARCHAR(2) DEFAULT NULL, passwords VARCHAR(100) DEFAULT NULL )ENGINE=MYISAM DEFAULT CHARSET=utf8; -- 创建存储过程 CREATE PROCEDURE test_insertdemow() BEGIN -- 定义一个属性 DECLARE i INT DEFAULT 0; WHILE i<=100000000 DO INSERT INTO test_user(username,gender,passwords) VALUES('宋佳豪','保密','751772898'); SET i=i+1; END WHILE; commit; END; CALL test_insertdemow();
结果让我比较满意。一亿条数据50多分钟存完
舒服了舒服了。接下来把它的引擎先不改,我想先测试innodb这个引擎
#没有改变innodb引擎下 id主键索引 耗时 0.018s select id,username,passwords from test_user WHERE id =9999999; #没有索引的查询 耗时 9.022s select id,username,passwords from test_user WHERE username='曾赛男'; #给username加上普通索引 耗时 801.141s (有点久) ALTER TABLE test_user add INDEX index_name(username); #username加上索引后再通过username去查 耗时 0.012s (有索引和没有索引的区别显而易见了)# select id,username,passwords from test_user WHERE username='曾赛男'; #将数据库的引擎改为innodb 耗时 315.159s ALTER TABLE test_user engine=INNODB; #改变innodb引擎下 id主键索引 耗时 0.016s select id,username,passwords from test_user WHERE id =9999999; #innodb 引擎下 普通索引 耗时 0.013s select id,username,passwords from test_user WHERE username='曾赛男';
我并没有测试出mysiam和innodb的一个差距比较,这里username加索引的效果倒是体现出来了。