mysql本地表,百万级别的数据,测试下添加索引,添加字段,等各种效果
例如新建一张空表 tmp_user, 建表语句如下:
CREATE TABLE `tmp_user` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`user_name` VARCHAR(50) NOT NULL,
`age` INT(10) NOT NULL,
`create_time` DATETIME NOT NULL,
`update_time` DATETIME NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
然后往表里面新增500万数据,shell脚本如下
#!/bin/bash
echo "==========start============="
user="cfyme"
passwd="caofangyi"
host="localhost"
db="wordpress"
sqlInsert="insert into tmp_user (user_name,age,create_time,update_time) values";
sql="$sqlInsert";
i=0;
MAX_COUNT=$1;
j=0;
while [ $i -lt $MAX_COUNT ]
do
if [ $j -eq 1000 ]
then
sqlValues="('HELLO$i',$i % 99,now(),now());"
sql="$sql $sqlValues"
mysql -h$host -u$user -p$passwd $db -e "$sql"
j=0
sql="$sqlInsert";
d=$(date "+%Y-%m-%d %H:%M:%S")
echo "add success, $d"
else
sqlValues="('HELLO$i',$i % 99,now(),now()),"
sql="$sql $sqlValues"
fi
i=$(($i+1))
j=$(($j+1))
done
#去掉最后的逗号
sql=${sql%,*}
mysql -h$host -u$user -p$passwd $db -e "$sql"
echo "===========end===========i==$i==j==$j"
运行脚本:sh batchInsert.sh 5000000
脚本文件中每1000条批量插入,这样500万数据就添加进去了
然后添加索引:
ALTER table tmp_user ADD INDEX idx_user_name (`user_name`);
这样就可以根据explain 或者 desc 测试在大表情况下,各种索引的效果了