--2. 正式生成100W
drop table stu_test_100w; --如果原来有,则先删除原来的表
--创建表及数据
create table stu_test_100w
as
select rownum as id,
'smith'||trunc(dbms_random.value(0, 99)) as stu_name,
dbms_random.string('x', 20) stu_pwd,
to_char(add_months(sysdate,-DBMS_RANDOM.VALUE(100,200)) + rownum / 24 / 3600, 'yyyy-mm-dd hh24:mi:ss') as birthday ,
decode( TRUNC(DBMS_RANDOM.VALUE(1,5)),1,'湖南省',2,'湖北省',3,'江西省','北京市') as address
from dual
connect by level <= 1000000; -- 生成 100w测试数据
-- 查看当前用户模式下所有的表
select * from tab where tname='STU_TEST_100W';
--先执行一次查询, 注意查询所用的时间,此时并没有加入索引
select * from stu_test_100w where stu_name='smith13';
执行结果:
以上是没有用到索引时的执行用时 6.781秒.
下面创建索引后,再用同一查询来测试.
--********生成索引后,再执行一次查询
drop index index_student_test;
create index index_student_test
on stu_test_100w(stu_name); --索引是针对某个表的某个列
--先执行一次查询, 注意查询的时间,此时加入了索引
select * from stu_test_100w where stu_name='smith13';
drop table stu_test_100w; --如果原来有,则先删除原来的表
--重新生成表及随机数据,注意 stu_name列的取值范围加大
create table stu_test_100w
as
select rownum as id,
'smith'||trunc(dbms_random.value(0, 9999999)) as stu_name,
dbms_random.string('x', 20) stu_pwd,
to_char(add_months(sysdate,-DBMS_RANDOM.VALUE(100,200)) + rownum / 24 / 3600, 'yyyy-mm-dd hh24:mi:ss') as birthday ,
decode( TRUNC(DBMS_RANDOM.VALUE(1,5)),1,'湖南省',2,'湖北省',3,'江西省','北京市') as address
from dual
connect by level <= 1000000;
--先执行一次查询, 注意查询的时间,此时并没有加入索引
select * from stu_test_100w where stu_name='smith8821228';
执行结果如下:
用时 0.312秒.
接着创建索引后,再测试同一个查询
--********生成索引后,再执行一次查询
drop index index_student_test;
create index index_student_test
on stu_test_100w(stu_name); --索引是针对某个表的某个列
--先执行一次查询, 注意查询的时间,此时加入了索引
select * from stu_test_100w where stu_name='smith8821228';