国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL存儲過程的優化實例

2024-07-24 12:53:55
字體:
來源:轉載
供稿:網友

前言

在數據庫的開發過程中,經常會遇到復雜的業務邏輯和對數據庫的操作,這個時候就會用存儲過程來封裝數據庫操作。如果項目的存儲過程較多,書寫又沒有一定的規范,將會影響以后的系統維護困難和大存儲過程邏輯的難以理解,另外如果數據庫的數據量大或者項目對存儲過程的性能要求很,就會遇到優化的問題,否則速度有可能很慢,經過親身經驗,一個經過優化過的存儲過程要比一個性能差的存儲過程的效率甚至高幾百倍。下面介紹某一個MySQL存儲過程優化的整個過程。

在本文中,需要被優化的存儲過程如下:

drop procedure if exists pr_dealtestnum;delimiter //create procedure pr_dealtestnum( in p_boxnumber varchar(30))pr_dealtestnum_label:begin insert into tb_testnum select boxnumber,usertype from tb_testnum_tmp where boxnumber= p_boxnumber; leave pr_dealtestnum_label;end;//delimiter ;select 'create procedure pr_dealtestnumok';

在存儲過程中使用到的表tb_testnum結構如下:

drop table if exists tb_testnum;create table tb_testnum( boxnumber varchar(30) not null, usertype int not null );create unique index idx1_tb_testnum ontb_testnum(boxnumber);

在存儲過程中使用到的另外一張表tb_testnum_tmp結構如下:

drop table if exists tb_testnum_tmp;create table tb_testnum_tmp( boxnumber varchar(30) not null, usertype int not null );create unique index idx1_tb_testnum_tmp ontb_testnum_tmp(boxnumber);

從兩個表的結構可以看出,tb_testnum和tb_testnum_tmp所包含的字段完全相同,存儲過程pr_dealtestnum的作用是根據輸入參數將tb_testnum_tmp表的數據插入到tb_testnum表中。

很明顯,雖然能夠實現預期的功能,但存儲過程pr_dealtestnum的代碼還有改進的地方。

下面,我們一步一步來對其進行優化。

優化一

存儲過程pr_dealtestnum的主體是一條insert語句,但這條insert語句里面又包含了select語句,這樣的編寫是不規范的。因此,我們要把這條insert語句拆分成兩條語句,即先把數據從tb_testnum_tmp表中查找出來,再插入到tb_testnum表中。修改之后的存儲過程如下:

drop procedure if exists pr_dealtestnum;delimiter //create procedure pr_dealtestnum( in p_boxnumber varchar(30))pr_dealtestnum_label:begin declare p_usertype int; select usertype into p_usertype from tb_testnum_tmp where boxnumber=p_boxnumber; insert into tb_testnum values(p_boxnumber,p_usertype); leave pr_dealtestnum_label;end;//delimiter ;select 'create procedure pr_dealtestnum ok';

優化二

在向tb_testnum表插入數據之前,要判斷該條數據在表中是否已經存在了,如果存在,則不再插入數據。同理,在從tb_testnum_tmp表中查詢數據之前,要先判斷該條數據在表中是否存在,如果存在,才能從表中查找數據。修改之后的存儲過程如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永昌县| 嘉鱼县| 喀喇| 星子县| 屯门区| 普兰店市| 阿尔山市| 嵩明县| 哈密市| 金湖县| 女性| 临颍县| 木兰县| 台东市| 肇州县| 曲麻莱县| 丰镇市| 太康县| 马尔康县| 太保市| 通海县| 惠来县| 嘉鱼县| 铜山县| 交口县| 望谟县| 南川市| 丽水市| 琼海市| 肇源县| 都江堰市| 黑河市| 兖州市| 台湾省| 屏南县| 隆回县| 阜阳市| 油尖旺区| 达州市| 桃江县| 南京市|