目录
show index from 表名;
show index from student;
create index 索引名 on 表名(字段名);
create index idx_classes_name on classes(name);
drop index 索引名 on 表名;
drop index idx_classes_name on classes;
- -- 创建用户表
- DROP TABLE IF EXISTS test_user;
- CREATE TABLE test_user (
- id_number INT,
- name VARCHAR(20) comment '姓名',
- age INT comment '年龄',
- create_time timestamp comment '创建日期'
- );
准备测试数据,批量插入用户数据(操作耗时较长,约在1小时+):
- -- 构建一个8000000条记录的数据
- -- 构建的海量表数据需要有差异性,所以使用存储过程来创建,
- -- 拷贝下面代码就可以了,暂时不用理解
- -- 产生名字
- drop function if exists rand_name;
- delimiter $$
- create function rand_name(n INT, l INT)
- returns varchar(255)
- begin
- declare return_str varchar(255) default '';
- declare i int default 0;
- while i < n do
- if i=0 then
- set return_str = rand_string(l);
- else
- set return_str =concat(return_str,concat(' ', rand_string(l)));
- end if;
- set i = i + 1;
- end while;
- return return_str;
- end $$
- delimiter;
-
- -- 产生随机字符串
- drop function if exists rand_string;
- delimiter $$
- create function rand_string(n INT)
- returns varchar(255)
- begin
- declare lower_str varchar(100) default
- 'abcdefghijklmnopqrstuvwxyz';
- declare upper_str varchar(100) default
- 'ABCDEFJHIJKLMNOPQRSTUVWXYZ';
- declare return_str varchar(255) default '';
- declare i int default 0;
- declare tmp int default 5+rand_num(n);
- while i < tmp do
- if i=0 then
- set return_str
- =concat(return_str,substring(upper_str,floor(1+rand()*26),1));
- else
- set return_str
- =concat(return_str,substring(lower_str,floor(1+rand()*26),1));
- end if;
-
- set i = i + 1;
- end while;
- return return_str;
- end $$
- delimiter;
-
- -- 产生随机数字
- drop function if exists rand_num;
- delimiter $$
- create function rand_num(n int)
- returns int(5)
- begin
- declare i int default 0;
- set i = floor(rand()*n);
- return i;
- end $$
- delimiter;
-
- -- 向用户表批量添加数据
- drop procedure if exists insert_user;
- delimiter $$
- create procedure insert_user(in start int(10),in max_num int(10))
- begin
- declare i int default 0;
- set autocommit = 0;
- repeat
- set i = i + 1;
- insert into test_user values ((start+i) ,rand_name(2,
- 5),rand_num(120),CURRENT_TIMESTAMP);
- until i = max_num
- end repeat;
- commit;
- end $$
- delimiter;
-
- -- 执行存储过程,添加8000000条用户记录
- call insert_user(1, 8000000);
- -- 可以看到耗时4.93秒,这还是在本机一个人来操作,在实际项目中,
- -- 如果放在公网中,假如同时有1000个人并发查询,那很可能就死机。
- select * from test_user where id_number=556677;
为提供查询速度,创建 id_number 字段的索引:
create index idx_test_user_id_number on test_user(id_number);
select * from test_user where id_number=776655;
- drop table if exists accout;
- create table accout(
- id int primary key auto_increment,
- name varchar(20) comment '账户名称',
- money decimal(11,2) comment '金额'
- );
- insert into accout(name, money) values
- ('阿里巴巴', 5000),
- ('四十大盗', 1000);
- -- 阿里巴巴账户减少2000
- update accout set money=money-2000 where name = '阿里巴巴';
- -- 四十大盗账户增加2000
- update accout set money=money+2000 where name = '四十大盗';
- start transaction;
- -- 阿里巴巴账户减少2000
- update accout set money=money-2000 where name = '阿里巴巴';
- -- 四十大盗账户增加2000
- update accout set money=money+2000 where name = '四十大盗';
- commit;