建表
drop table if exists t1;
CREATE TABLE t1(
id int NOT NULL AUTO_INCREMENT PRIMARY KEY comment '主鍵',
person_id tinyint not null comment '用戶id',
person_name varchar(30) comment '用戶名稱',
gmt_create datetime not null comment '創(chuàng)建時間',
gmt_modified datetime comment '修改時間'
) comment '測試表2048條';
插入一條數(shù)據(jù)
insert into t1 values(1,1,'user_1', NOW(), now());
利用mysql偽列rownum 設置偽列起始點為1
select (@i:=@i+1) as rownum, person_name from t1, (select @i:=100) as init;
set @i=1;
運行下面的sql
執(zhí)行20次即2的20次方=1048576 條記錄(100萬)
執(zhí)行23次即2的23次方=8388608 條記錄(800萬)
執(zhí)行24次即2的24次方=16777216 條記錄(1600萬)
執(zhí)行25次即2的25次方=33554432 條記錄(3300萬)
執(zhí)行26次即2的26次方=67108864 條記錄(6700萬)
執(zhí)行27次即2的27次方=134217728 條記錄(1億3千萬)
insert into t1(id, person_id, person_name, gmt_create, gmt_modified)
select @i:=@i+1,
left(rand()*10,1) as person_id,
concat('user_',@i%2048),
date_add(gmt_create,interval + @i*cast(rand()*100 as signed) SECOND),
date_add(date_add(gmt_modified,interval +@i*cast(rand()*100 as signed) SECOND), interval + cast(rand()*1000000 as signed) SECOND)
from t1;
說明
LEFT()函數(shù)是一個字符串函數(shù)军洼,它返回具有指定長度的字符串的左邊部分贾富。
下面是LEFT()函數(shù)的語法 -
LEFT(str,length);
SQL
LEFT()函數(shù)接受兩個參數(shù):
str是要提取子字符串的字符串。length是一個正整數(shù)汗捡,指定將從左邊返回的字符數(shù)
INTERVAL關(guān)鍵字
INTERVAL關(guān)鍵字可以用于計算時間間隔畏纲,可以有以下用法。
1艘蹋,直接計算時間間隔票灰。
例1:查詢當前時間之前2個小時的日期:
SELECT NOW()-INTERVAL '2' HOUR;
SELECT
id,
percent,
t_date,
t_date - INTERVAL 2 HOUR
FROM
test
where t_date - INTERVAL 2 HOUR>'2020-11-02';
INTERVAL后面的數(shù)字可以用數(shù)字格式或者字符格式屑迂,當時間單位是YEAR_MONTH這種時,必須用字符格式
MySQL DATE_ADD() 函數(shù)
定義和用法
DATE_ADD() 函數(shù)向日期添加指定的時間間隔惹盼。
語法
DATE_ADD(date,INTERVAL expr type)
我們希望向 "OrderDate" 添加 2 天
DATE_ADD(OrderDate,INTERVAL 2 DAY)
CAST函數(shù)將任何類型的值轉(zhuǎn)換為具有指定類型的值https://www.yiibai.com/mysql/cast.html
rand()的取值范圍為[0,1)
tinyint字段舉例unsigned字段的取值范圍是0-255手报,而signed的范圍是-128 - 127
SECOND 秒
創(chuàng)建索引
create index idx_person_id on t1(person_id);
create index idx_gmt_create on t1(gmt_create);
create index idx_gmt_modified on t1(gmt_modified);