資料庫調優教程(二)慢查詢資料準備,資料庫調優

來源:互聯網
上載者:User

資料庫調優教程(二)慢查詢資料準備,資料庫調優

一、           發現慢查詢


上一講我們談論了慢查詢的定義,這一講我們來建立一張大表,為慢查詢做資料準備。

2.      慢查詢資料準備


要想發現慢查詢,首先要使慢查詢發生。在一張普通數量級的表格中是不能發生慢查詢的,除非你對於慢查詢的定義時一個毫秒。因此我們必須手動建立一張大數量級的表,這裡選擇建立一張40萬數量級的表(同學們也可以建立百萬級的,如果你們的電腦很厲害。但是一般情況下,十萬級的資料就可以看出慢查詢了)。

1)    建立資料庫

Create database bigTable default character set GBK;

2)    建立表

#部門表#


CREATE TABLE dept(id int unsigned primary key auto_increment,deptno MEDIUMINT   UNSIGNED  NOT NULL  DEFAULT 0, dname VARCHAR(20)  NOT NULL  DEFAULT "",loc VARCHAR(13) NOT NULL DEFAULT "") ENGINE=INNODB DEFAULT CHARSET=GBK ;


#僱員表#

CREATE TABLE emp(id int unsigned primary key auto_increment,empno  MEDIUMINT UNSIGNED  NOT NULL  DEFAULT 0, /*編號*/ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上級編號*/hiredate DATE NOT NULL,/*入職時間*/sal DECIMAL(7,2)  NOT NULL,/*薪水*/comm DECIMAL(7,2) NOT NULL,/*紅利*/deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部門編號*/)ENGINE=INNODB DEFAULT CHARSET=GBK ;


3)    建立函數

函數用於隨機產生資料,保證每條資料都不同

#函數1 建立#

#建立函數. 用於隨機產生字串。該函數接收一個整數


delimiter $$#定義一個新的命令結束符合create function rand_string(n INT) returns varchar(255) #該函數會返回一個字串begin #chars_str定義一個變數 chars_str,類型是 varchar(100),預設值'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'; declare chars_str varchar(100) default   'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'; declare return_str varchar(255) default ''; declare i int default 0; while i < n do    set return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));   set i = i + 1;   end while;  return return_str;  end $$


#函數2建立#

#用於隨機產生部門編號

create function rand_num( )returns int(5)begin  declare i int default 0; set i = floor(10+rand()*500);return i;  end $$


4)    建立預存程序

 

#預存程序一#

#該預存程序用於往emp表中插入大量資料

create procedure insert_emp(in start int(10),in max_num int(10))begindeclare i int default 0; #set autocommit =0 把autocommit設定成0 set autocommit = 0;   repeat set i = i + 1; insert into emp (empno, ename ,job ,mgr ,hiredate ,sal ,comm ,deptno ) values ((start+i) ,rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());  until i = max_num end repeat;   commit; end $$


執行預存程序,往emp表添加40萬條資料

call insert_emp(100001,400000);

查詢,發現Emp表插入了40萬條記錄



#預存程序二#

#往dept表添加隨機資料

create procedure insert_dept(in start int(10),in max_num int(10))begindeclare i int default 0;  set autocommit = 0;   repeat set i = i + 1; insert into dept (deptno ,dname,loc  ) values ((start+i) ,rand_string(10),rand_string(8));  until i = max_num end repeat;   commit; end $$


執行預存程序二

delimiter ;call insert_dept(100,10);


至此,資料準備完成。我們建立了大表emp。


下一講,我們將利用已建立的大表去發現慢查詢,並試著把慢查詢記錄到日誌中。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.