最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql prepare預處理的具體使用

 更新時間:2021年09月08日 15:57:45   作者:Kevin崔  
本文主要介紹了Mysql prepare預處理,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

MySQL PREPARE預處理技術意義在于,是為了減輕服務器壓力的一種技術。

就是說絕大多數(shù)情況下,某需求某一條SQL語句可能會被反復調用執(zhí)行,或者每次執(zhí)行的時候只有個別的值不同。
比如:

  • SELECT的 WHERE子句值不同;
  • UPDATE的 SET子句值不同;
  • INSERT的 VALUES值不同;
    如果每次都需要經(jīng)過上面的詞法語義解析、語句優(yōu)化、制定執(zhí)行計劃等,則效率就明顯下降。

1.預處理

MySQL提供了對服務器端準備語句的支持,就叫預處理。

這種支持利用了高效的客戶機/服務器二進制協(xié)議,使用帶有參數(shù)值占位符的預編譯語句有以下好處:

  • 減少每次執(zhí)行語句時解析語句的開銷。通常,數(shù)據(jù)庫應用程序處理大量幾乎相同的語句,只對子句中的字面值或變量值進行更改,例如用于查詢和刪除的WHERE、用于更新的SET和用于插入的values。
  • 防止SQL注入攻擊。參數(shù)值可以包含未轉義的SQL引號和分隔符。

預處理接口

1.應用程序中的預處理語句
可以通過客戶端編程接口使用服務器端準備好的語句,包括用于C程序的MySQL C API客戶端庫,用于Java程序的MySQL Connector/J,以及用于使用。NET技術的程序的MySQL Connector/NET。例如,C API提供了一組函數(shù)調用,這些函數(shù)調用構成了它的預編譯語句API

2.SQL腳本中的準備語句
還有一個用于預處理語句的替代SQL接口。但不需要編程,在SQL級別直接可用,可以在任何可以將SQL語句發(fā)送到要執(zhí)行的服務器的程序中使用它,例如mysql客戶端程序。

2.預處理應用方式

預處理語句的SQL語法基于三個SQL語句:

  • PREPARE語句準備執(zhí)行。
  • EXECUTE執(zhí)行一條預處理語句。
  • DEALLOCATE PREPARE釋放一個預處理語句。

A.例子:

預處理語句無法跨SESSION操作:

mysql>CREATE TABLE `t1` (
  `id` int NOT NULL,
   NAME varchar(20),
KEY `idx_id` (`id`)
) ENGINE=InnoDB ;
 
mysql>INSERT INTO t1(id,name) values(1,'A'),(2,'B'),(3,'C'),(4,'D'),(5,'E'),(6,'F');
 
#設定預處理語句
mysql>PREPARE stmt1 FROM  'SELECT * FROM t1 WHERE a=? ';
 
#設置傳遞變量
mysql>SET @a = 8;
 
#執(zhí)行語句
mysql>EXECUTE stmt1 USING @a;
 
#釋放預處理語句
mysql>DEALLOCATE PREPAR stmt1;

B.預處理對執(zhí)行計劃變化跟蹤

通過觀察status指標Select_scan(執(zhí)行全表搜索查詢的數(shù)量)變化判斷是否會受到數(shù)據(jù)量變更的影響。

image.jpg

預處理sql語句隨著數(shù)據(jù)量的變化執(zhí)行計劃也在變更。

C.存儲過程包含預處理

預處理語句在存儲的例程中創(chuàng)建預處理語句,則在存儲的例程結束時不會釋放該語句。

DELIMITER //
 
DROP PROCEDURE IF EXISTS proc_prepared;
CREATE PROCEDURE proc_prepared()
BEGIN
DECLARE a INT;
DECLARE i INT;
PREPARE stmt1 FROM  'SELECT * FROM t1 WHERE id>? ';
SET @a = 5;
EXECUTE stmt1 USING @a;
END //
 
DELIMITER ;
 
call proc_prepared();
存儲過程之后單獨調用預處理語句,返回結果集:說明預處理沒有銷毀
 
SET @a = 5;
EXECUTE stmt1 USING @a;
+----+------+
| id | NAME |
+----+------+
|  6 | F    |
。。。

存儲過程之后單獨調用預處理語句,返回結果集:說明預處理沒有銷毀

SET @a = 5; EXECUTE stmt1 USING @a; +----+------+ | id | NAME | +----+------+ | 6 | F | 。。。

D.通過profile 查看解析語句的開銷

通過profile各種語句執(zhí)行時間,解析語句花費的時間都在0.01秒以內(nèi)??梢院雎圆挥?。
所以目前在預處理方面上沒有發(fā)現(xiàn)明顯的優(yōu)勢。

image.jpg

3.總結

預編譯初始的作用:

  • 提高效率:事先解析、檢查、編譯等工作。
  • 提高安全性:預防SQL注入

局限性和實際效果:

  • 預處理因為局限在session級別,現(xiàn)在無法體現(xiàn)真正的價值。因為mysql GA版本沒有線程池概念,每個鏈接就是每個session
  • 解析編譯語句的開銷 基本對于mysql環(huán)境來說忽略不計
  • 執(zhí)行計劃也是隨著數(shù)據(jù)量而變化的。

從局限性和實際效果來看,目前沒有發(fā)揮應有的功能。不適合聲場環(huán)境中使用。

到此這篇關于Mysql prepare預處理的具體使用的文章就介紹到這了,更多相關Mysql prepare預處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL字段類型與Java實體類類型對應轉換關系詳解

    MySQL字段類型與Java實體類類型對應轉換關系詳解

    這篇文章主要介紹了MySQL字段類型與Java實體類類型對應轉換關系,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Mysql連接無效(invalid connection)問題及解決

    Mysql連接無效(invalid connection)問題及解決

    這篇文章主要介紹了Mysql連接無效(invalid connection)問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • MySQL鎖的知識點總結

    MySQL鎖的知識點總結

    在本篇文章里小編給大家整理了關于MySQL鎖的知識點總結以及實例內(nèi)容,需要的朋友們學習下。
    2019-11-11
  • 查找MySQL中查詢慢的SQL語句方法

    查找MySQL中查詢慢的SQL語句方法

    這篇文章主要介紹了查找MySQL中查詢慢的SQL語句方法,需要的朋友可以參考下
    2017-05-05
  • MySQL 如何連接對應的客戶端進程

    MySQL 如何連接對應的客戶端進程

    這篇文章主要介紹了MySQL 如何連接對應的客戶端進程,幫助大家更好的理解和學習MySQL,感興趣的朋友可以了解下
    2020-11-11
  • jdbc調用mysql存儲過程實現(xiàn)代碼

    jdbc調用mysql存儲過程實現(xiàn)代碼

    接下來將介紹下mysql存儲過程的創(chuàng)建及調用,調用時涉及到jdbc的知識,不熟悉的朋友還要溫習下jdbc哦,話不多說看代碼,希望可以幫助到你
    2013-03-03
  • 輕松上手MYSQL之SQL優(yōu)化之Explain詳解

    輕松上手MYSQL之SQL優(yōu)化之Explain詳解

    Explain是SQL分析工具中非常重要的一個功能,它可以模擬優(yōu)化器執(zhí)行查詢語句,幫助我們理解查詢是如何執(zhí)行的,這篇文章主要給大家介紹了關于輕松上手MYSQL之SQL優(yōu)化之Explain詳解的相關資料,需要的朋友可以參考下
    2024-06-06
  • MySQL中查找最小缺失ID的方法實現(xiàn)

    MySQL中查找最小缺失ID的方法實現(xiàn)

    在開發(fā)過程中,我們經(jīng)常會遇到需要查找數(shù)據(jù)庫表中最小的缺失 ID 的情況,特別是在處理需要順序標識符的業(yè)務邏輯時,下面就來介紹一下,感興趣的可以了解一下
    2024-11-11
  • MySQL 到底是如何做到多版本并發(fā)的

    MySQL 到底是如何做到多版本并發(fā)的

    這篇文章主要介紹了 MySQL 事務隔離級別的底層原理。大家一起來閱讀下文吧
    2021-08-08
  • MySQL存儲過程圖文實例講解

    MySQL存儲過程圖文實例講解

    雖然MySQL的存儲過程一般情況下是不會使用到的,但是在一些特殊場景中,還是有需求的,下面這篇文章主要給大家介紹了關于MySQL存儲過程的相關資料,需要的朋友可以參考下
    2022-03-03

最新評論

滦平县| 西贡区| 万山特区| 巴彦淖尔市| 正镶白旗| 天津市| 咸阳市| 江北区| 彭阳县| 海阳市| 武川县| 西贡区| 稷山县| 青龙| 巴南区| 萝北县| 遂宁市| 安仁县| 龙川县| 关岭| 栖霞市| 霍州市| 泰来县| 石楼县| 突泉县| 息烽县| 张北县| 星子县| 牟定县| 任丘市| 定西市| 铅山县| 云南省| 乐昌市| 六枝特区| 隆安县| 和田县| 泾源县| 许昌市| 东乌珠穆沁旗| 宜川县|