1   Oracle:

 

 

--创建表空间:
create tablespace mydb datafile 'e:\oracle\mydb\mydb.ora' size 100M autoextend on;
--创建用户并授权:
create user yuanlin identified by 123 default tablespace mydb quota 10m on users; 
--将对表空间的所有操作功能:
grant connect,resource,dba,sysdba  to yuanlin; 

--用新用户连接:
conn yuanlin
123

--表two,four,six,eight分别插入2、4、6、8条记录,为了多表连接得到如6000W这样数据的返回记录:
CREATE  TABLE two(                       
    id NUMBER,     
    uname VARCHAR(10),
    age NUMBER);
INSERT INTO two(id,uname,age) VALUES(1,'twe2',2);
INSERT INTO two(id,uname,age) VALUES(2,'twe2',2);

CREATE  TABLE four(
    id NUMBER PRIMARY KEY,     
    uname VARCHAR(10),
    age NUMBER);
INSERT INTO four(id,uname,age) VALUES(1,'four4',4);
INSERT INTO four(id,uname,age) VALUES(2,'four4',4);
INSERT INTO four(id,uname,age) VALUES(3,'four4',4);
INSERT INTO four(id,uname,age) VALUES(4,'four4',4);

CREATE  TABLE six(
    id NUMBER PRIMARY KEY,     
    uname VARCHAR(10),
    age NUMBER);
INSERT INTO six(id,uname,age) VALUES(1,'six6',6);
INSERT INTO six(id,uname,age) VALUES(2,'six6',6);
INSERT INTO six(id,uname,age) VALUES(3,'six6',6);
INSERT INTO six(id,uname,age) VALUES(4,'six6',6);
INSERT INTO six(id,uname,age) VALUES(5,'six6',6);
INSERT INTO six(id,uname,age) VALUES(6,'six6',6);

CREATE  TABLE eight(
    id NUMBER PRIMARY KEY,     
    uname VARCHAR(10),
    age NUMBER);
INSERT INTO eight(id,uname,age) VALUES(1,'eight8',8);
INSERT INTO eight(id,uname,age) VALUES(2,'eight8',8);
INSERT INTO eight(id,uname,age) VALUES(3,'eight8',8);
INSERT INTO eight(id,uname,age) VALUES(4,'eight8',8);
INSERT INTO eight(id,uname,age) VALUES(5,'eight8',8);
INSERT INTO eight(id,uname,age) VALUES(6,'eight8',8);
INSERT INTO eight(id,uname,age) VALUES(7,'eight8',8);
INSERT INTO eight(id,uname,age) VALUES(8,'eight8',8);

---------表test1,触发器trig1,序列test1_seq搭配实现表ID的自动增长------------

DROP TABLE test1;
DROP SEQUENCE test1_seq;
DROP TRIGGER trig1;

CREATE  TABLE test1(
    id NUMBER PRIMARY KEY,     
    uname VARCHAR(10),
    age NUMBER);

CREATE SEQUENCE test1_seq
          INCREMENT BY 1 -- 每次加几个
          START WITH 1 -- 从1开始计数
          NOMAXVALUE -- 不设置最大值
          NOCYCLE -- 一直累加,不循环
          NOCACHE -- 不建缓冲区;

CREATE TRIGGER trig1 
      BEFORE INSERT ON test1 FOR EACH ROW WHEN (new.id IS NULL)
      BEGIN
          SELECT test1_seq.nextval INTO:new.id FROM dual;
      END;
    /

---------表test2,触发器trig2,序列test2_seq搭配实现表ID的自动增长------------

DROP TABLE test2;
DROP SEQUENCE test2_seq;
DROP TRIGGER trig2;

CREATE  TABLE test2(
    id NUMBER PRIMARY KEY,     
    uname VARCHAR(10),
    age NUMBER);

CREATE SEQUENCE test2_seq
          INCREMENT BY 1 -- 每次加几个
          START WITH 1 -- 从1开始计数
          NOMAXVALUE -- 不设置最大值
          NOCYCLE -- 一直累加,不循环
          NOCACHE -- 不建缓冲区;

CREATE TRIGGER trig2 
      BEFORE INSERT ON test2 FOR EACH ROW WHEN (new.id IS NULL)
      BEGIN
          SELECT test2_seq.nextval INTO:new.id FROM dual;
      END;
      /


---------表test3,触发器trig3,序列test3_seq搭配实现表ID的自动增长------------

DROP TABLE test3;
DROP SEQUENCE test3_seq;
DROP TRIGGER trig3;

CREATE  TABLE test3(
    id NUMBER PRIMARY KEY,     
    uname VARCHAR(10),
    age NUMBER);

CREATE SEQUENCE test3_seq
          INCREMENT BY 1 -- 每次加几个
          START WITH 1 -- 从1开始计数
          NOMAXVALUE -- 不设置最大值
          NOCYCLE -- 一直累加,不循环
          NOCACHE -- 不建缓冲区;

CREATE TRIGGER trig3
      BEFORE INSERT ON test3 FOR EACH ROW WHEN (new.id IS NULL)
      BEGIN
          SELECT test3_seq.nextval INTO:new.id FROM dual;
      END;
      /

---------表test4,触发器trig4,序列test4_seq搭配实现表ID的自动增长------------

DROP TABLE test4;
DROP SEQUENCE test4_seq;
DROP TRIGGER trig4;

CREATE  TABLE test4(
    id NUMBER PRIMARY KEY,     
    uname VARCHAR(10),
    age NUMBER);

CREATE SEQUENCE test4_seq
          INCREMENT BY 1 -- 每次加几个
          START WITH 1 -- 从1开始计数
          NOMAXVALUE -- 不设置最大值
          NOCYCLE -- 一直累加,不循环
          NOCACHE -- 不建缓冲区;

CREATE TRIGGER trig4 
      BEFORE INSERT ON test4 FOR EACH ROW WHEN (new.id IS NULL)
      BEGIN
          SELECT test4_seq.nextval INTO:new.id FROM dual;
      END;
    /




---------表test5,触发器trig5,序列test5_seq搭配实现表ID的自动增长------------

DROP TABLE test5;
DROP SEQUENCE test5_seq;
DROP TRIGGER trig5;

CREATE  TABLE test5(
    id NUMBER PRIMARY KEY,     
    uname VARCHAR(10),
    age NUMBER);

CREATE SEQUENCE test5_seq
          INCREMENT BY 1 -- 每次加几个
          START WITH 1 -- 从1开始计数
          NOMAXVALUE -- 不设置最大值
          NOCYCLE -- 一直累加,不循环
          NOCACHE -- 不建缓冲区;

CREATE TRIGGER trig5 
      BEFORE INSERT ON test5 FOR EACH ROW WHEN (new.id IS NULL)
      BEGIN
          SELECT test5_seq.nextval INTO:new.id FROM dual;
      END;
    /

---------表test6,触发器trig6,序列test6_seq搭配实现表ID的自动增长------------

DROP TABLE test6;
DROP SEQUENCE test6_seq;
DROP TRIGGER trig6;

CREATE  TABLE test6(
    id NUMBER PRIMARY KEY,     
    uname VARCHAR(10),
    age NUMBER);

CREATE SEQUENCE test6_seq
          INCREMENT BY 1 -- 每次加几个
          START WITH 1 -- 从1开始计数
          NOMAXVALUE -- 不设置最大值
          NOCYCLE -- 一直累加,不循环
          NOCACHE -- 不建缓冲区;

CREATE TRIGGER trig6 
      BEFORE INSERT ON test6 FOR EACH ROW WHEN (new.id IS NULL)
      BEGIN
          SELECT test6_seq.nextval INTO:new.id FROM dual;
      END;
      /


---------表test7,触发器trig7,序列test7_seq搭配实现表ID的自动增长------------

DROP TABLE test7;
DROP SEQUENCE test7_seq;
DROP TRIGGER trig7;

CREATE  TABLE test7(
    id NUMBER PRIMARY KEY,     
    uname VARCHAR(10),
    age NUMBER);

CREATE SEQUENCE test7_seq
          INCREMENT BY 1 -- 每次加几个
          START WITH 1 -- 从1开始计数
          NOMAXVALUE -- 不设置最大值
          NOCYCLE -- 一直累加,不循环
          NOCACHE -- 不建缓冲区;

CREATE TRIGGER trig7 
      BEFORE INSERT ON test7 FOR EACH ROW WHEN (new.id IS NULL)
      BEGIN
          SELECT test7_seq.nextval INTO:new.id FROM dual;
      END;
      /


-------------------------------创建过程插入数据------------------------------------


---------过程insert_pro1,插入10条数据-----------

CREATE OR REPLACE PROCEDURE insert_pro1(NUMS NUMBER)
  AS
  i NUMBER;
  BEGIN
      FOR  i IN 1 .. NUMS loop
  INSERT INTO test1(uname,age) VALUES('zhangsan',11);
  END LOOP;
  END;
  /

 call  insert_pro1(10);

---------创建过程2,插入100条数据-----------

CREATE OR REPLACE PROCEDURE insert_pro2(NUMS NUMBER)
  AS
  i NUMBER;
  BEGIN
      FOR  i IN 1 .. NUMS loop
  INSERT INTO test2(uname,age) VALUES('lisi',22);
  END LOOP;
  END;
  /

 call  insert_pro2(100);

---------创建过程3,插入1000条数据-----------

CREATE OR REPLACE PROCEDURE insert_pro3(NUMS NUMBER)
  AS
  i NUMBER;
  BEGIN
      FOR  i IN 1 .. NUMS loop
  INSERT INTO test3(uname,age) VALUES('wangwu',33);
  END LOOP;
  END;
  /

 call  insert_pro3(1000);

---------创建过程4,插入10000条数据-----------

CREATE OR REPLACE PROCEDURE insert_pro4(NUMS NUMBER)
  AS
  i NUMBER;
  BEGIN
      FOR  i IN 1 .. NUMS loop
  INSERT INTO test4(uname,age) VALUES('zhaoliu',44);
  END LOOP;
  END;
  /

 call  insert_pro4(10000);



----10W  16.86s----
SELECT count(*) FROM test1 t1 join test4 t4 on 1=1;
INSERT INTO test5(uname,age) SELECT t4.uname , t1.age FROM test1 t1 join test4 t4 on 1=1;
COMMIT;

----100w  02m 53.63s----
SELECT count(*) FROM test2 t2 join test4 t4 on 1=1;
INSERT INTO test6(uname,age) SELECT t4.uname , t2.age FROM test2 t2 join test4 t4 on 1=1;
COMMIT;

----400w  13m 19.41s----
SELECT count(*) FROM test2 t2 join test4 t4 on 1=1 join four on 1=1;
INSERT INTO test7(uname,age) SELECT t4.uname , t2.age FROM test2 t2 join test4 t4 on 1=1
join four on 1=1  where id=3244;
commit;

 

2  Mysql:

查询测试记录:

查询时间与返回记录数、字段数、连接表的数目关系最大,一般为正比关系。

说明:查询结果写入硬盘,并未直接输出,因为硬盘关系,无法做数据更大的查询测试。

 

1,没有加入条件的测试

记录数/万

表数量

字段数

耗时/秒

1

2

2

0.02

10

2

2

0.03

100

2

2

0.23

1000

2

2

2.14

2000

3

2

4.37

4000

3

2

8.61

6000

3

2

12.82

10000

2

2

21.34

20000

3

2

42.93

40000

3

2

1 分27.81

 

2,加入条件的测试

记录数/万

表数量

字段数

耗时/秒

1

2

2

0.02

19

2

2

0.11

199

2

2

1.22

599

2

2

2.89

800

2

2

6.21

1600

2

2

12.96

2400

2

2

20.31

 

总结:数量级上亿级都能正常查询。

 

 

导入测试记录:

说明:从硬盘导入,并非直接写Insert语句,导入前都先把表清空。

 

记录数/万

表数量

字段数

耗时/秒

1

1

2

0.25

10

1

2

0.87

100

1

2

6.85

400

1

2

37.56

600

1

2

58.85

1000

1

2

1分 47.53

2000

1

2

4分 6.12

4000

1

2

8分 3.79

10000

1

2

28分 52.54

 

总结:1,当导入数量上千万时,服务就出现短暂假死现象。

           2,如果是编写过程插入数据则很查,数目上万就很慢了。

 

修改测试记录:

 

记录数/万

表数量

字段数

耗时/秒

1

1

1

0.42

10

1

1

2.64

100

1

1

28.39

400

1

1

1分 49.21

1000

1

1

5分 39.32

CREATE DATABASE mydb;
USE mydb;

--表two,four,six分别插入2、4、6条记录,为了多表连接得到如6000W这样数据的返回记录;

CREATE  TABLE two(                       
    uid INT PRIMARY KEY AUTO_INCREMENT,     
    uname VARCHAR(10),
    age INT);
INSERT two(uname,age) VALUES('twe2',2);
INSERT two(uname,age) VALUES('twe2',2);


CREATE  TABLE four(
    uid INT PRIMARY KEY AUTO_INCREMENT,     
    uname VARCHAR(10),
    age INT);
INSERT four(uname,age) VALUES('four4',4);
INSERT four(uname,age) VALUES('four4',4);
INSERT four(uname,age) VALUES('four4',4);
INSERT four(uname,age) VALUES('four4',4);

CREATE  TABLE six(
    uid INT PRIMARY KEY AUTO_INCREMENT,     
    uname VARCHAR(10),
    age INT);
INSERT six(uname,age) VALUES('six6',6);
INSERT six(uname,age) VALUES('six6',6);
INSERT six(uname,age) VALUES('six6',6);
INSERT six(uname,age) VALUES('six6',6);
INSERT six(uname,age) VALUES('six6',6);
INSERT six(uname,age) VALUES('six6',6);

---------创建过程1和表test1,并向其中插入10条数据,插入数据用时0.18------------

DROP TABLE test1;
DROP PROCEDURE insert_pro1;

CREATE  TABLE test1(
    uid INT PRIMARY KEY AUTO_INCREMENT,     
    uname VARCHAR(10),
    age INT);

DELIMITER //
CREATE PROCEDURE insert_pro1(IN count INT)
    BEGIN 
    DECLARE i INT;
    SET i=0;
    WHILE i<count DO
    INSERT test1(uname,age) VALUES('zhangsan',11);
    SET i=i+1;
    END WHILE;
    END;
    //
DELIMITER ;


SET @count=10;  
CALL insert_pro1(@count);

---------创建过程2和表test2,并插入100条数据,插入数据用时1.31------------

DROP TABLE test2;
DROP PROCEDURE insert_pro2;

CREATE  TABLE test2(
    uid INT PRIMARY KEY AUTO_INCREMENT,     
    uname VARCHAR(10),
    age INT);

DELIMITER //
CREATE PROCEDURE insert_pro2(IN count INT)
    BEGIN 
    DECLARE i INT;
    SET i=0;
    WHILE i<count DO
    INSERT test2(uname,age) VALUES('lisi',22);
    SET i=i+1;
    END WHILE;
    END;
    //
DELIMITER ;


SET @count=100;  
CALL insert_pro2(@count);

---------创建过程3和表test3,并插入1000条数据,插入数据用时13.06------

DROP TABLE test3;
DROP PROCEDURE insert_pro3;

CREATE  TABLE test3(
    uid INT PRIMARY KEY AUTO_INCREMENT,     
    uname VARCHAR(10),
    age INT);

DELIMITER //
CREATE PROCEDURE insert_pro3(IN count INT)
    BEGIN 
    DECLARE i INT;
    SET i=0;
    WHILE i<count DO
    INSERT test3(uname,age) VALUES('wangwu',33);
    SET i=i+1;
    END WHILE;
    END;
    //
DELIMITER ;


SET @count=1000;  
CALL insert_pro3(@count);


---------创建过程4和表test4,插入10000条数据,插入数据用时3m 45.08s--------

DROP TABLE test4;
DROP PROCEDURE insert_pro4;

CREATE  TABLE test4(
    uid INT PRIMARY KEY AUTO_INCREMENT,     
    uname VARCHAR(10),
    age INT);

DELIMITER //
CREATE PROCEDURE insert_pro4(IN count INT)
    BEGIN 
    DECLARE i INT;
    SET i=0;
    WHILE i<count DO
    INSERT test4(uname,age) VALUES('zhaoliu',44);
    SET i=i+1;
    END WHILE;
    END;
    //
DELIMITER ;


SET @count=10000;  
CALL insert_pro4(@count);



1,    查询测试源代码:
SELECT age,uname FROM test4 INTO OUTFILE "e:/mydb/t_1w.txt";        
    --0.02

SELECT t1.age,t4.uname FROM test1 t1 join test4 t4 INTO OUTFILE "e:/mydb/t_10w.txt";                              
--0.03 SELECT t2.age, t4.uname FROM test2 t2 join test4 t4 INTO OUTFILE "e:/mydb/t_100w.txt"; --0.23 SELECT t3.age,t4.uname FROM test3 t3 join test4 t4 INTO OUTFILE "e:/mydb/t_1000w.txt"; --2.14 SELECT t3.age,t4.uname FROM test3 t3 join test4 t4 join two INTO OUTFILE "e:/mydb/t_2000w.txt"; --4.37 SELECT t3.age,t4.uname FROM test3 t3 join test4 t4 join four f INTO OUTFILE "e:/mydb/t_4000w.txt"; --8.61 SELECT t3.age,t4.uname FROM test3 t3 join test4 t4 join six s INTO OUTFILE "e:/mydb/t_6000w.txt"; --12.82 SELECT t41.age,t42.uname FROM test4 t41 join test4 t42 INTO OUTFILE "e:/mydb/t_10000w.txt"; --21.34 SELECT t41.age,t42.uname FROM test4 t41 join test4 t42 join two INTO OUTFILE "e:/mydb/t_20000w.txt"; --42.93 SELECT t41.age,t42.uname FROM test4 t41 join test4 t42 join four INTO OUTFILE "e:/mydb/t_40000w.txt"; --1min 27.81 ------------------------------------------------------准备工作----------------------------------------------------

 


加入测试条件:

SELECT t5.uname,t6.age FROM test5 t5,test6 t6 WHERE t5.uid>t6.uid INTO OUTFILE "e:/mydb/select_1yw.txt";            --0.03
--1w--0.02s

SELECT t6.uname,t.age FROM test6 t6 JOIN two t ON t6.uid>t.uid INTO OUTFILE "e:/mydb/join_19w.txt";    
--19w--0.11s

SELECT t7.uname,t.age FROM test7 t7 JOIN two t ON t7.uid>t.uid INTO OUTFILE "e:/mydb/join_199w.txt";    
--199w--1.22s

SELECT t7.uname,s.age FROM test7 t7 JOIN six s ON t7.uid>s.uid 
JOIN four f INTO OUTFILE "e:/mydb/join_599y9w.txt";    
--599w--2.89s

SELECT t7.uname,e.age FROM test7 t7 JOIN eight e ON t7.uid>e.uid INTO OUTFILE "e:/mydb/join_799w.txt";    
--799w--2.89s

SELECT t8.uname,t.age FROM test8 t8 JOIN two s ON t8.uid>t.uid INTO OUTFILE "e:/mydb/join_5999w.txt";    
--800w--6.21s

SELECT t8.uname,f.age FROM test8 t8 JOIN four f ON t8.uid>f.uid INTO OUTFILE "e:/mydb/join_29989w.txt";    
--1600w--12.96s

SELECT t8.uname,s.age FROM test8 t8 JOIN six s ON t8.uid>s.uid INTO OUTFILE "e:/mydb/join_59799w.txt";    
--2400w--20.31s

SELECT t7.uname,t8.age FROM test8 t8,test7 t7 WHERE t8.uid=t7.uid INTO OUTFILE "e:/mydb/select_100w.txt";        --3.09
SELECT t7.uname,t8.age FROM test8 t8 JOIN test7 t7 ON t8.uid=t7.uid INTO OUTFILE "e:/mydb/join_100w.txt";        --1.54

SELECT t7.uname,t8.age FROM test8 t8,test7 t7 WHERE t8.uid>t7.uid INTO OUTFILE "e:/mydb/select_300w.txt";        --3.09
SELECT t7.uname,t8.age FROM test8 t8 JOIN test7 t7 ON t8.uid>t7.uid INTO OUTFILE "e:/mydb/join_100w.txt";    
--1.54