-- mysql測試任務:使用儲存過程,往表中插入千萬級資料,根據索引優化速度
-- 1.使用索引查詢
-- 2.不使用索引查
-- 3.比較兩者查詢速度的差異
-- 1.建立索引測試表
drop table if exists index_test;
create table index_test(
id bigint(20) primary key not null auto_increment,
user varchar(16) default null,
psd varchar(64) default null
/*psd mediumint default 0 儲存隨機資料*/
)engine=myisam default charset=utf8;
/*myisam儲存引擎不產生引擎事務,資料插入速度極快,為方便快速插入千萬條測試資料,等我們插完資料,再把儲存型別修改為innodb*/
-- 2.建立儲存過程,插入資料
delimiter $$
use `xscj`$$
drop procedure if exists `insert_data`$$
create definer=`root`@`localhost` procedure `insert_data`(in num int)
begin
declare n int default 1;/*定義乙個變數,儲存當前執行的次數*/
while n <= num
do
insert into index_test(user,psd) values(concat('使用者',n),password(n));/*concat()字串連線、password()加密函式*/
/*insert into index_test(user,psd) values(concat('使用者',n),ret_pwd());*/
set n=n+1;
end while;
end$$
delimiter ;
-- 3.建立乙個函式,隨機生成密碼,並返回給pwd欄位
delimiter $$
create
/*[definer = ]*/
function `xscj`.`ret_pwd`()
returns int(5)
/*language sql
| [not] deterministic
|
| sql security
| comment 'string'*/
begin
declare r int default 0;
set r = floor(10+rand()*1000);
return r;
end$$
delimiter ;
-- 4.呼叫儲存過程,插入100萬條資料(總耗時:6 min 35 sec)
-- 6.通過主鍵索引查詢,不使用普通索引(總耗時:0.022 sec)
-- 7.不通過索引查詢(總耗時:7.058 sec)
select * from index_test where user='使用者1950000'
-- 8.為user欄位建立普通索引,並通過該索引進行查詢
create index index_user on index_test (user asc);-- (總耗時:1 min 20 sec)
select * from index_test where user='使用者1950000';-- (總耗時:0.078 sec)
-- 9.使用user、pwd聯合查詢,由於user新增了索引,pwd未新增索引,故進行篩選查詢是仍舊採用全表掃瞄,因此時間略有提公升(總耗時:7.086 sec)
select * from index_test where user='使用者1950000' or psd='*b810355cf0690506e5295aa66741d44e6af4e61d';
-- 10.對user、pwd欄位建立聚合索引後,再查詢
create index index_userpwd on index_test (user,psd asc);-- (總耗時:2 min 25 sec)
select * from index_test where user='使用者1950000' or psd='*b810355cf0690506e5295aa66741d44e6af4e61d';-- (總耗時:13.014 sec)
-- 檢視表結構
desc index_test;
-- 查詢表資料
select * from index_test;
-- 刪除表資料
delete from index_test;
-- 刪除索引
drop index index_user on `index_test`;
drop index index_userpwd on `index_test`;
mysql利用儲存過程批量插入一千萬資料(半小時)
示例 向user表中插入一千萬條資料,其中user id11位手機號隨機,可以重複 age為18 27之間 count隨機金額,八位小數 status二百萬資料為1,八百萬資料為0。如果該名字儲存過程已存在,則刪除 drop procedure ifexists proc initdata1 建立 ...
mysql使用儲存過程 函式實現批量插入
寫這邊文章的目的,是想結合mysql 儲存過程 函式完成乙個批量刪除的功能吧.正好也好加深下對procedure和function的熟練操作吧.廢話不多說,我就直接上表結構啦哈,如下 create table dept id int unsigned primary key auto increme...
mysql使用儲存過程 函式實現批量插入
寫這邊文章的目的,是想結合mysql 儲存過程 函式完成乙個批量刪除的功能吧.正好也好加深下對procedure和function的熟練操作吧.廢話不多說,我就直接上表結構啦哈,如下 create table dept id int unsigned primary keyauto incremen...