到底要不要使用儲存過程?

2021-08-20 20:41:28 字數 2418 閱讀 1417

mysql 執行語句是要先編譯,然後再執行的。這樣如果查詢併發大的時候。會浪費很多資源和時間。造成mysql程序占用資源過多,症狀就是慢。但儲存過程可以把一些特別的語句封裝成乙個方法 ,再編譯好成乙個可以執行的方法,對外只要接收引數就可以了。這樣就不用再編譯。執行就快了。什麼時候會用到?你覺得你資料庫因為同時出現太多讀寫操作而變得慢 ,那麼就要用了,主要用來提公升效能。

其他看法:

1.在傳統企業,比如銀行什麼的,有嚴格的開發規範指定所有的業務邏輯處理必須放在儲存過程裡。開發人員不需要知道表結構,不需要知道字段型別,只用呼叫就好,保證資料庫的安全性。所以必須保證寫出的儲存過程效能是極高的,但是即使效能很好,在資料庫端進行大量的計算,還是會影響資料庫的效能。

2.也看到阿里等等的大牛說不要使用儲存過程,在大流量衝擊下,資料庫的負載壓力會特別大,降低吞吐量。而且不易遷移和維護。

3.在網際網路企業裡,應該都很少使用儲存過程吧,至少我沒有碰到,業務邏輯需要在資料庫端處理的。

sql語句需要先編譯然後執行,而儲存過程是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。

1、很多相似性的刪除,更新,新增等操作就變得輕鬆了,並且以後也便於管理!

2、儲存過程因為sql語句已經預編繹過了,因此執行的速度比較快。

3、儲存過程可以接受引數、輸出引數、返回單個或多個結果集以及返回值。

4、儲存過程執行比較穩定,不會有太多的錯誤。

5、儲存過程主要是在伺服器上執行,減少對客戶機的壓力。

6、儲存過程可以從自己的儲存過程內引用其它儲存過程,簡化複雜語句。

1.建立

2.刪除

3.呼叫

1.建立儲存過程
1.基本語法:

create procedure sp_name()

begin

.........

end2.引數傳遞

2.刪除
drop procedure sp_name;
3.呼叫
1.基本語法:call sp_name()

注意:儲存過程名稱後面必須加括號,哪怕該儲存過程沒有引數傳遞

首先建立一張students學生表,增加欄位與插入資料如下

5.1建立不帶引數的儲存過程(檢視學生個數)

delimiter ;;

create procedure `select_students_count`()

begin

select count(id) from students;

end;;

delimiter ;

執行儲存過程

call select_students_count();

5.2 帶引數的儲存過程(根據城市查詢總數)

delimiter ;;

create procedure `select_students_by_city_count`(

in _city varchar(225)

)begin

select count(id) from students where city = _city;

end;;

delimiter ;

執行儲存過程

call select_students_by_city_count('杭州');

到底要不要拆分函式

問題描述 怎樣的函式才算是有意義的函式?比如這樣的函式有沒有意義?1 只被呼叫一次的函式 2 只有一句實現內容的函式 3 函式很多的引數 比如乙個函式,有很多區域性變數,如果要拆成多個函式,那麼每個函式都要傳遞這些區域性變數,會造成函式的引數很多。在拆分函式這個問題上,我們要考慮我們在開發過程中,是...

到底要不要拆分函式

怎樣的函式才算是有意義的函式?比如這樣的函式有沒有意義?1 只被呼叫一次的函式 2 只有一句實現內容的函式 3 函式很多的引數 比如乙個函式,有很多區域性變數,如果要拆成多個函式,那麼每個函式都要傳遞這些區域性變數,會造成函式的引數很多。在拆分函式這個問題上,我們要考慮我們在開發過程中,是以寫為主?...

到底要不要拆分函式

怎樣的函式才算是有意義的函式?比如這樣的函式有沒有意義?1 只被呼叫一次的函式 2 只有一句實現內容的函式 3 函式很多的引數 比如乙個函式,有很多區域性變數,如果要拆成多個函式,那麼每個函式都要傳遞這些區域性變數,會造成函式的引數很多。在拆分函式這個問題上,我們要考慮我們在開發過程中,是以寫為主?...