SQl語句中使用佔位符的優點

2021-07-26 08:17:35 字數 1360 閱讀 3492

sql語句中使用佔位符的優點

1.增加sql**可讀性

2.佔位符可以預先編譯,提高執行效率

3.防止sql注入

4用佔位符的目的是繫結變數,這樣可以減少資料sql的硬解析,所以執行效率會提高不少

繫結變數是oracle解決硬解析的首要利器,能解決oltp系統中library cache的過度耗用以提高效能

繫結變數是為了減少解析的,比如你有個語句這樣:

select aaa,bbb from ccc where ddd=eee;

如果經常通過改變eee這個謂詞賦值來查詢,像如下

select aaa,bbb from ccc where ddd=fff;

select aaa,bbb from ccc where ddd=ggg;

select aaa,bbb from ccc where ddd=hhh;

每條語句都要被資料庫解析一次,這樣比較浪費資源,如果把eee換成「:1」這樣的繫結變數形式,無論ddd後面是什麼值,都不需要重複解析

假設要將id從1到10000的員工的工資都更新為150.00元,

不使用繫結變數:

sql.executequery("update employees set salay = 150.00 where id = 1");

sql.executequery("update employees set salay = 150.00 where id = 2");

sql.executequery("update employees set salay = 150.00 where id = 3");

sql.executequery("update employees set salay = 150.00 where id = 4");

....

sql.executequery("update employees set salay = 150.00 where id = 10000");

使用繫結變數:

update employees set salay = ? where id = ?"

二者區別在於,不用繫結變數,則相當於反覆解析、執行了1w個sql語句。使用繫結變數,解析sql語句只用了一次,之後的9999次復用第一次生成的執行計畫。顯然,後者效率會更高一些。

什麼時候不應該/不必要使用繫結變數

•a. 如果你用資料倉儲,一條大查詢一跑幾個小時,根本沒必要做繫結變數,因為解析的消耗微乎其微。

•b. 變數對優化器產生執行計畫有很重要的影響的時候:繫結變數被使用時,查詢優化器會忽略其具體值,因此其預估的準確性遠不如使用字面量值真實,尤其是在表存在資料傾斜(表上的資料非均勻分布)的列上會提供錯誤的執行計畫,從而使得非高效的執行計畫被使用

**:

SQl語句中使用佔位符的優點

1.增加sql 可讀性 2.佔位符可以預先編譯,提高執行效率 3.防止sql注入 4用佔位符的目的是繫結變數,這樣可以減少資料sql的硬解析,所以執行效率會提高不少 繫結變數是oracle解決硬解析的首要利器,能解決oltp系統中library cache的過度耗用以提高效能 繫結變數是為了減少解析...

Android中使用佔位符

android中佔位符的使用 string name data 整數型 1 d,浮點型 2 2f,字串 3 s 其中 後面是佔位符的位置,從1開始 後面是填充資料的型別 d 表示整數型 f 表示浮點型,其中f前面的.2表示小數的位數 s 表示字串 這些和c語言中輸入輸出函式的佔位符很相似 在程式中我...

Mysql的sql語句中使用判斷語句遇到的問題

mysql開發的過程中,遇到這樣乙個問題 乙個unsigned的int型別的字段inbox cnt,要將其值減去乙個值5,為了保證這個欄位不出現負值,我們可以在sql語句中使用if來判斷,語句如下 update user cache set inbox cnt if inbox cnt 5 0,0,...