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

深入探究MySQL中使用where 1=1是否存在性能影響

 更新時間:2024年02月20日 11:00:21   作者:Lorin洛林  
最近在項目中使用 mybatis 寫 SQL 使用了 where 1=1 來簡化多條件拼接的寫法,案例如下,借此聊聊多條件拼接的常見的一些寫法以及 where 1=1 是否存在性能影響,需要的朋友可以參考下

前言

  • 最近在項目中使用 mybatis 寫 SQL 使用了 where 1=1 來簡化多條件拼接的寫法,案例如下,借此聊聊多條件拼接的常見的一些寫法以及 where 1=1 是否存在性能影響。
<select id="" parameterType = "">
	SELECT * FROM users 
	WHERE 1=1
		<if test="userName != null ">
			AND user_name = #{userName}
		</if>
		<if test="userAge != null ">
			AND user_age = #{userAge }
		</if>
		<if test="userSex!= null ">
			AND	user_sex = #{userSex}
		</if>
</select>

聊聊 mybatis 中多條件拼接的兩種常規(guī)寫法

where 1=1

  • 如前言中的示例:
<select id="" parameterType = "">
	SELECT * FROM users 
	WHERE 1=1
		<if test="userName != null ">
			AND user_name = #{userName}
		</if>
		<if test="userAge != null ">
			AND user_age = #{userAge }
		</if>
		<if test="userSex!= null ">
			AND	user_sex = #{userSex}
		</if>
</select>

使用 <where> 標簽

  • mybatis 提供 <where> 標簽,<where> 標簽只有在一個以上的if條件有值的情況下才去插入WHERE子句。若AND 或 OR 前沒有有效語句,where 元素會將它們?nèi)コ?/li>
<select id="" parameterType = "">
	SELECT * FROM users 
	<where>
		<if test="userName != null ">
			AND user_name = #{userName}
		</if>
		<if test="userAge != null ">
			AND user_age = #{userAge }
		</if>
		<if test="userSex!= null ">
			AND	user_sex = #{userSex}
		</if>
	</where>
</select>

性能影響

  • where 1=1 和 <where> 標簽兩種寫法前者性能損耗在 SQL查詢性能優(yōu)化,后者在于 SQL 語句動態(tài)生成 。下面我們來具體分析一下:
  • MySQL 版本:
SELECT VERSION();

5.7.44

# 數(shù)據(jù)構(gòu)造 SQL
CREATE TABLE IF NOT EXISTS t_user
(
  id INT not null auto_increment primary key comment '自增ID',
  name varchar(20) comment '姓名',
  age tinyint  comment '年齡'
)ENGINE = INNODB;


INSERT INTO t_user ( NAME, age ) VALUES ( '張三', 18 ),( '李四', 19 ),( '王五', 20 ),( '司總', 21 );

where 1=1

  • 在 5.7 以上版本中,SQL查詢性能優(yōu)化 會將 1=1 部分優(yōu)化掉,并不會影響索引,但網(wǎng)上有部分資料說在低版本中有一定影響,所以需要稍微留意一下。
# 注:需要選中一起執(zhí)行可以查看到優(yōu)化后的 SQL
explain select * from t_user where 1=1 AND name = '張三';
show warnings;

# 優(yōu)化后的 SQL
/* select#1 */ SELECT
`mydatabase`.`t_user`.`id` AS `id`,
`mydatabase`.`t_user`.`name` AS `name`,
`mydatabase`.`t_user`.`age` AS `age` 
FROM
	`mydatabase`.`t_user` 
WHERE
	(
	`mydatabase`.`t_user`.`name` = '張三')
  • 從優(yōu)化后的 SQL 可以看到, 1=1 部分已經(jīng)被查詢優(yōu)化器優(yōu)化掉,所有對整體的性能影響并不大。
# 性能對比
select * from t_user where 1=1 AND name = '張三'
> OK
> 查詢時間: 0.046s

select * from t_user where 1=1
> OK
> 查詢時間: 0.046s

<where> 標簽

  • 相比于 where 1=1 在 MySQL 中服務(wù)器層由查詢優(yōu)化器進行處理,<where> 標簽在動態(tài)構(gòu)建 SQL 中處理,但性能也無很大影響,因為本質(zhì)并不是很復(fù)雜的動態(tài) SQL 生成。

總結(jié)

  • where 1=1<where> 標簽是多條件拼接的兩種常見寫法,性能層面而言并沒有較大的影響,具體選擇何種寫法可以根據(jù)團隊的規(guī)范決定。
  • 此外兩種方案的處理與處理的數(shù)據(jù)量無關(guān),一次執(zhí)行都僅處理一次,所以在大數(shù)據(jù)量下也無性能差異。

以上就是深入探究MySQL中使用where 1=1是否存在性能影響的詳細內(nèi)容,更多關(guān)于MySQL where 1=1性能影響的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySql中 is Null段判斷無效和IFNULL()失效的解決方案

    MySql中 is Null段判斷無效和IFNULL()失效的解決方案

    這篇文章主要介紹了MySql中 is Null段判斷無效和IFNULL()失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • MySQL數(shù)據(jù)庫備份以及常用備份工具集合

    MySQL數(shù)據(jù)庫備份以及常用備份工具集合

    數(shù)據(jù)庫備份種類按照數(shù)據(jù)庫大小備份,有四種類型,分別應(yīng)用于不同場合。本文將MySQL 數(shù)據(jù)庫備份種類以及常用備份工具進行匯總,方便大家學(xué)習(xí)。
    2015-08-08
  • mysql不支持group by的解決方法小結(jié)

    mysql不支持group by的解決方法小結(jié)

    下載安裝的是最新版的mysql5.7.x版本,默認是開啟了 only_full_group_by 模式的,但開啟這個模式后,原先的 group by 語句就報錯,然后又把它移除了
    2020-02-02
  • MySQL的cpu使用率100%的問題排查流程

    MySQL的cpu使用率100%的問題排查流程

    線上mysql服務(wù)器經(jīng)常性出現(xiàn)cpu使用率100%的告警, 因此本文整理一下排查該問題的常規(guī)流程,文中通過代碼示例講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2025-02-02
  • MySQL流程控制IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的使用

    MySQL流程控制IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的使用

    這篇文章介紹了MySQL流程控制IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • MySQL錯誤代碼2058和2059的解決辦法

    MySQL錯誤代碼2058和2059的解決辦法

    這篇文章主要介紹了MySQL錯誤代碼2058和2059的解決辦法,2058和2059的錯誤碼核心都是你用的客戶端工具和mysql版本的密碼插件不匹配,下面就來介紹一下解決方法,感興趣的可以了解一下
    2025-03-03
  • Mysql日期格式以及內(nèi)置日期函數(shù)用法詳解

    Mysql日期格式以及內(nèi)置日期函數(shù)用法詳解

    MySQL中有多種數(shù)據(jù)類型可以用于日期和時間的表示,這篇文章主要給大家介紹了關(guān)于Mysql日期格式以及內(nèi)置日期函數(shù)用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • MySQL查詢優(yōu)化之查詢慢原因和解決技巧

    MySQL查詢優(yōu)化之查詢慢原因和解決技巧

    這篇文章主要介紹了MySQL查詢優(yōu)化之查詢慢原因和解決技巧,內(nèi)容講解的很詳細,有對于這方面不太懂的同學(xué)可以研究一下。
    2021-02-02
  • 簡單整理MySQL的日志操作命令

    簡單整理MySQL的日志操作命令

    這篇文章主要介紹了MySQL的日志操作命令,其中重點講述了MySQL的日志刪除方法,需要的朋友可以參考下
    2015-12-12
  • 詳解MySQL中SlowLog的配置方法(圖文)

    詳解MySQL中SlowLog的配置方法(圖文)

    mysql 日志系統(tǒng)上線有段時間了,前端在慢慢切站點過來寫入,未雨綢繆 diy了套 mysql 監(jiān)控工具
    2014-02-02

最新評論

定襄县| 平罗县| 大新县| 鄂温| 新兴县| 新郑市| 南丰县| 山西省| 北辰区| 麟游县| 罗江县| 临西县| 嘉义市| 溆浦县| 客服| 綦江县| 安徽省| 申扎县| 泰兴市| 睢宁县| 高密市| 漾濞| 大渡口区| 南通市| 赣州市| 蓬溪县| 开阳县| 达尔| 公主岭市| 仪征市| 黄山市| 新泰市| 灵台县| 平遥县| 多伦县| 邯郸县| 金寨县| 金湖县| 米易县| 桂平市| 陆川县|