标签:bst tab 查询 proc tin null 生效 abc rand
今天尝试使用索引来提升查找效率,因此使用mysql进行实验,然后创建了一个表,往里面随机插入100万条数据。使用的是linux环境下的mysql,数据库连接软件是navicat。
使用里面包含tableid,userid等,这是创建表的语句。
CREATE TABLE user
(
`tableid` INT (11) NOT NULL AUTO_INCREMENT,
`userid` VARCHAR (20) NOT NULL,
`type` TINYINT (16) NOT NULL,
`time` datetime NOT NULL,
PRIMARY KEY (`tableid`)
) ENGINE = MEMORY AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8
然后构建一个随机函数,这里的userid使用的是随机函数
delimiter $$
create function rand_string(n int) returns varchar(255)
begin
declare chars_str varchar(100) default ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ‘;
declare return_str varchar(255) default ‘‘;
declare i int default 0;
while i<n do
set return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));
set i=i+1;
end while;
return return_str;
end
$$
然后使用过程进行创建
delimiter $$
CREATE PROCEDURE add_vote_memory
(IN n int)
select count(*) from vote_record_memory
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= n ) DO
INSERT into vote_record_memory (userid,type,time ) VALUEs (rand_string(20),FLOOR(RAND() * 10),now() );
set i=i+1;
END WHILE;
END
$$
之后再调用这个过程
call add_vote_memory(1000000)
然后就执行操作,但是还没有执行完就发现出现了报错
查看数据库,发现竟然网上竟然说的是这样做是压力测试的时候报错。原因有二:1
1 得知是由于内存表的大小超过了规定的范围。经过查看二者值默认均是16M,
2.需要设置tmp_table_size 大于等于max_heap_table_size
首先查看内存表得大小:
在mysql里面查询
show VARIABLES like ‘%%table_size%‘
得到上述的结果打开/etc/mysql目录下的my.cnf并在后面添加
tmp_table_size = 256M
max_heap_table_size = 256M
需要写入my.cnf配置文件重启mysql然后生效。
使用
service mysql restart
进行重启mysql服务
mysql插入数据出现error1114 table is full
标签:bst tab 查询 proc tin null 生效 abc rand
原文地址:https://www.cnblogs.com/liweifua/p/13905337.html